我知道那里有很多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
}
]
}
然后我按照Serializing python object instance to JSON和其他几个人的建议去解码对象:
jsonToEncode = newJSON(myList1, myList2)
myNewJSONData = json.dumps(jsonToEncode.__dict__)
但是我得到了“不是JSON可序列化的错误”...我已经尝试了这个有和没有 dict 但是没有成功。 JSON必须采用上面显示的格式。有什么问题?
由于
**** **** EDIT
为了制作这两个列表,我采用了一个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
答案 0 :(得分:2)
无需创建新对象。只需直接序列化字典:
myNewJSONData = json.dumps({'data': list1, 'info': list2})
但是,您的代码应该是有效的。您可能在list1
和list2
中的数据包含,但这些数据不可序列化。
答案 1 :(得分:0)
请尝试myNewJSONData = json.dumps(jsonToEncode.data)
。
甚至myNewJSONData = json.dumps({'data': list1, 'info' : list2})
。为什么你还要使用那个班级jsonToEncode
?
答案 2 :(得分: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
}
}
]
}
>>>
答案 3 :(得分: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