0

我知道那里有很多 json/python 问题,但我似乎无法弄清楚这一点。我正在尝试将两个列表序列化到同一个文件中。为此,我创建了一个包含两个列表的新类:

class newJSON(object):
    def __init__(self, list1, list2):
        self.data = {'data': list1, 'info' : list2}

我需要生成的数据文件如下所示:

{
    "data" : [
        {
            "name" : "aName" ,
            "coordinates" : {"obj2" : 33, "obj3" : 71} 
        } , {
            "name" : "bName" ,
            "coordinates" : {"obj2" : 12, "obj3" : 77} 
        }
        ] ,
    "info" : [
        {
            "first" : ["xxx" , "yyy"] ,
            "space" : 21
        } , {
            "first" : ["aaa" , "bbb"] ,
            "space" : 12
        }
        ]
}

然后我按照将python 对象实例序列化为 JSON和其他几个中的建议对对象进行解码:

jsonToEncode = newJSON(myList1, myList2)
myNewJSONData = json.dumps(jsonToEncode.__dict__)

但是我得到了“不是 JSON 可序列化错误”......我在有和没有dict的情况下都试过了,但没有成功。JSON 必须采用上述格式。问题是什么?

谢谢

****编辑****

为了制作这两个列表,我采用了一个 json 文件,该文件的格式与所示的 json 完全相同,并执行以下操作:

list1 = [obj1(**myObj) for myObj in data["data"]]

和 list2 一样。obj1 是这样制作的:

class obj1(object):
    def__init__(self, name, coordinates): 
        self.name = name 
        self.coordinate = coordinates
4

4 回答 4

2

无需创建新对象。直接序列化字典即可:

myNewJSONData = json.dumps({'data': list1, 'info': list2})

但是,您的代码应该可以正常工作。您可能包含其中不可序列化list1的数据。list2

于 2013-02-28T13:24:59.160 回答
0

试试myNewJSONData = json.dumps(jsonToEncode.data)吧。

甚至myNewJSONData = json.dumps({'data': list1, 'info' : list2})。你为什么还要使用那个类jsonToEncode

于 2013-02-28T13:23:54.570 回答
0

试试这个:

myNewJSONData = json.dumps(jsonToEncode.data, indent=2)

或这个:

>>> class newJSON2(dict):
...     def __init__(self, list1, list2):
...         self['data'] = list1
...         self['info'] = list2
>>> 
>>> 
>>> json2 = newJSON2(list1, list2)
>>> json2
{'info': [{'space': 21, 'first': ['xxx', 'yyy']}, {'space': 12, 'first': ['aaa', 'bbb']}], 'data': [{'name': 'aName', 'coordinates': {'obj3': 71, 'obj2': 33}}, {'name': 'bName', 'coordinates': {'obj3': 77, 'obj2': 12}}]}
>>> print json.dumps(json2, indent=2)
{
  "info": [
    {
      "space": 21, 
      "first": [
        "xxx", 
        "yyy"
      ]
    }, 
    {
      "space": 12, 
      "first": [
        "aaa", 
        "bbb"
      ]
    }
  ], 
  "data": [
    {
      "name": "aName", 
      "coordinates": {
        "obj3": 71, 
        "obj2": 33
      }
    }, 
    {
      "name": "bName", 
      "coordinates": {
        "obj3": 77, 
        "obj2": 12
      }
    }
  ]
}
>>> 
于 2013-02-28T13:33:01.973 回答
0

使用simplejson图书馆。

from simplejson import loads, dumps
print loads(json_string) # Converts a JSON string to dict
print dumps(python_object) # Converts any valid python object/dict to valid JSON string

看看https://pypi.python.org/pypi/simplejson

于 2013-02-28T13:37:00.977 回答