首页 > 解决方案 > 在嵌套对象列表中插入字典

问题描述

我有以下 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)

这可能吗?
谢谢!

标签: python-3.xpandasdataframedictionary

解决方案


您需要了解dictlist之间的区别。

据我了解您的问题,使用您提供的输入、数据和输出,您可以执行以下操作:

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。:)


推荐阅读