使用Python合并JSON数据

时间:2018-04-13 08:05:58

标签: python json

作为Python程序的一部分,我想合并包含相同结构化数据的JSON对象。例如:

{
    "responseStatus": "SUCCESS",
    "responseDetails": {
        "total": 5754,
    },
    "data": [
        {
            "id": 1324651
        },
        {
            "id": 5686131
        }
    ]
}

我想要做的是将section对象的数据数组的内容添加到我的第一个对象的数据数组中。

所以,假设:

thejson1 = json.loads({"responseStatus": "SUCCESS","responseDetails": {"total": 5754,},"data": [{"id": 1324651},{"id": 5686131}]})
thejson2 = json.loads({"responseStatus": "SUCCESS","responseDetails": {"total": 1234,},"data": [{"id": 2165735},{"id": 2133256}]})

我以为执行:

thejson1["data"].append(thejson2["data"])

将thejson1扩展为:

{
    "responseStatus": "SUCCESS",
    "responseDetails": {
        "total": 5754,
    },
    "data": [
        {
            "id": 1324651
        },
        {
            "id": 5686131
        },
        {
            "id": 2165735
        },
        {
            "id": 2133256
        }
    ]
}

但它的作用是将thejson2数据作为数组添加到json1的数据数组中:

{
    "responseStatus": "SUCCESS",
    "responseDetails": {
        "total": 5754,
    },
    "data": [
        {
            "id": 1324651
        },
        {
            "id": 5686131
        },
        [
            {
                "id": 2165735
            },
            {
                "id": 2133256
            }
        ]
    ]
}

那么,我做错了什么?看起来append会添加第二个JSON对象的数据数组而不是其内容,但请注意,我事先无法知道"数据的内容"在我的JSON输入中的数组,所以我不能编写特别循环在" id"对象逐个添加。

提前致谢!

R上。

2 个答案:

答案 0 :(得分:2)

您正在寻找extend,而不是append

thejson1["data"].extend(thejson2["data"])

append接受单个参数并将其插入到结尾。 extend 通过将参数列表中的所有单个值添加到结尾来扩展列表。

# example:
a=[1, 2, 3]

b = a[:].append([4, 5])
# b = [1, 2, 3, [4, 5]]

c = a[:].extend([4, 5])
# c = [1, 2, 3, 4, 5]

答案 1 :(得分:1)

thejson1 = {"responseStatus": "SUCCESS","responseDetails": {"total": 5754,},"data": [{"id": 1324651},{"id": 5686131}]}
thejson2 = {"responseStatus": "SUCCESS","responseDetails": {"total": 1234,},"data": [{"id": 2165735},{"id": 2133256}]}

thejson1["data"]  += thejson2["data"]

<强>输出:

{'responseDetails': {'total': 5754}, 'data': [{'id': 1324651}, {'id': 5686131}, {'id': 2165735}, {'id': 2133256}], 'responseStatus': 'SUCCESS'}

您还可以使用+=进行扩展。