python-3.x - 在嵌套对象列表中插入字典
问题描述
我有以下 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)
这可能吗?
谢谢!
解决方案
您需要了解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。:)
推荐阅读
- javascript - JavaScript 可移动 div 和 JavaScript
- c++ - Windows Mutex 和 waitforsingleobject 如何在内部工作
- python - 在我已经是微数据集中的索引错误太多
- ios - 在 appstoreconnect 上查看 appstore 选项不可用
- python - Python 正则表达式 - 任何子字符串匹配
- node.js - 如何修复 gcloud 应用部署错误 云构建失败。故障状态:未知?
- java - Android:RecyclerViewAdapter 中的 GetApplication
- keras - 性别分类-VGG模型
- python - Python:如何在我的时间序列中减少每天的前 5 分钟?
- javascript - 通过内容脚本在 XML 文件中注入 javascript