我有以下JSON数据:
[{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": [{"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}]}, "status_txt": "OK"},{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": []}, "status_txt": "OK"}]
我需要附加一个字典列表:{"key":"a"},{"key":"b"}
以某种方式将每个键添加到每个对象中,因此结果可以像这样:
[{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": [{"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}]}, "status_txt": "OK", "key":"a"},{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": []}, "status_txt": "OK", "key":"b"}]
我尝试过的答案之一是这段代码,但是它不起作用:
data = json.load(open('file.json'))
if type(data) is dict:
data = [data]
data.append({"key": "a","key": "b"})
with open('file.json', 'w') as outfile:
json.dump(data, outfile)
错误:JSONDecodeError: Extra data: line 1 column 449 (char 448)
这可能吗?
谢谢!
答案 0 :(得分:2)
您需要了解 dict 和 list 之间的区别。
据我了解您的问题,使用您提供的输入,数据和输出,您可以执行以下操作:
inp = [{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": [{"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}]}, "status_txt": "OK"},{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": []}, "status_txt": "OK"}]
data = [{"key":"a"},{"key":"b"}]
out = [{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": [{"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}, {"key": "value", "key": "value"}]}, "status_txt": "OK", "key":"a"},{"status_code": 200, "data": {"key": 1, "key": "value", "key": "value", "key": "value", "key": []}, "status_txt": "OK", "key":"b"}]
for item, data_item in zip(inp, data):
item.update(data_item)
print( inp == out )
# True
您在此代码中所做的是:由于您的数据是一个长度与输入长度相同的列表,并且想要将数据的第一项添加到输入的第一项...
您要与输入同时遍历数据。 zip()
通过基本制作两个列表中每个元素的元组来解决此问题。 zip([1, 2], [3, 4])
变成[(1, 3), (2, 4)]
。
然后在每次迭代中,使用字典数据更新您的字典输入。
如您所见,如果我将其与您想要的输出进行比较,它将给出True。 :)