Pythonically连接两个相似但高度嵌套的JSON对象

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, ...} }, {

我有一个巨大的JSON人物记录对象……就像通过使用请求的API调用获取的那样:

{
    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。您尝试过吗?为什么不将人员列表合并到一个列表中?