Pythonically连接两个相似但高度嵌套的JSON对象
我有一个巨大的JSON人物记录对象……就像通过使用请求的API调用获取的那样:Pythonically连接两个相似但高度嵌套的JSON对象,python,json,replace,python-requests,generator,Python,Json,Replace,Python Requests,Generator,我有一个巨大的JSON人物记录对象……就像通过使用请求的API调用获取的那样: { people: [ { foo: { key: value, ...}, bar: { key: value, ...}, person: { name: Harry, ...}, baz: { key: value, ...} }, {
{
people: [
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Harry, ...},
baz: { key: value, ...}
},
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Sally, ...},
baz: { key: value, ...}
},
{
... # many more records
}
]
}
对同一API的第二次调用会生成格式和标签完全相同的附加记录
{
people: [
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Jack, ...},
baz: { key: value, ...}
},
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Jill, ...},
baz: { key: value, ...}
},
{
... #many more records
}
]
}
我需要将这些记录连接到一个文件中,或者说,解析和操作数据,以便最终插入数据库。我需要保存所有的记录。。。我不想覆盖JSON对象中的任何一条记录
我很容易将第二组记录附加到包含第一组记录的文件中……但我得到:
{
people: [
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Harry, ...},
baz: { key: value, ...}
},
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Sally, ...},
baz: { key: value, ...}
},
{
... #many more records
}
]
}
{
people: [
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Jack, ...},
baz: { key: value, ...}
},
{
foo: { key: value, ...},
bar: { key: value, ...},
person: { name: Jill, ...},
baz: { key: value, ...}
},
{
... #many more records
}
]
}
…但这些角色:
]
}
{
people: [
…加上第一个响应中最后一条记录末尾缺少的逗号,使其无效
我如何正确地连接这两个JSON对象,即将它们作为一个格式正确且有效的大JSON对象写入文件
最理想的方法是什么?我认为最好在连接这两个对象并将它们写入文件之前,从API响应中去掉不需要的字段。但如果我只想在不需要的字符写入文件后删除它们…我该怎么做呢
我尝试过.replace、.strip,考虑过使用正则表达式,尝试过将数据粘贴到列表中并使用列表理解,尝试过字典理解和一些生成器。无法完全确定最佳和最惯用的做法是什么…您的格式化代码既不是有效的Python dict,也不是有效的JSON 但是,如果您的数据类似于上述格式,您可以使用ast模块中的literal_eval并将数据转换为有效的python dict,然后您可以将其转储到文件中或在程序中使用它 请参见此示例:
from ast import literal_eval as le
a = '''{
'people': [
{
'foo': { 'key': 'value'},
'bar': { 'key': 'value'},
'person': { 'name': 'Harry'},
'baz': { 'key': 'value'}
},
{
'foo': { 'key': 'value'},
'bar': { 'key': 'value'},
'person': { 'name': 'Sally'},
'baz': { 'key': 'value'}
}]}'''
b = '''{
'people': [
{
'foo': { 'key': 'value'},
'bar': { 'key': 'value'},
'person': { 'name': 'Harry'},
'baz': { 'key': 'value'}
},
{
'foo': { 'key': 'value'},
'bar': { 'key': 'value'},
'person': { 'name': 'Sally'},
'baz': { 'key': 'value'}
}]}'''
final = [le(a), le(b)]
print(final)
输出:
[{'people': [{'person': {'name': 'Harry'}, 'baz': {'key': 'value'}, 'bar': {'key': 'value'}, 'foo': {'key': 'value'}}, {'person': {'name': 'Sally'}, 'baz': {'key': 'value'}, 'bar': {'key': 'value'}, 'foo': {'key': 'value'}}]}, {'people': [{'person': {'name': 'Harry'}, 'baz': {'key': 'value'}, 'bar': {'key': 'value'}, 'foo': {'key': 'value'}}, {'person': {'name': 'Sally'}, 'baz': {'key': 'value'}, 'bar': {'key': 'value'}, 'foo': {'key': 'value'}}]}]
但是您提供的格式化代码不是有效的JSON,也不是有效的Python dict。您尝试过吗?为什么不将人员列表合并到一个列表中?