在python中更新添加到json(嵌套)。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中更新添加到json(嵌套)。相关的知识,希望对你有一定的参考价值。

我的JSON文件如下图所示

{
    "PersonA": {
        "Age": "35",
        "Place": "Berlin",
        "cars": ["Ford", "BMW", "Fiat"]
    },

    "PersonB": {
        "Age": "45",
        "Cars": ["Kia", "Ford"]
    },

    "PersonC": {
        "Age": "55",
        "Place": "London"
    }
}

我正试图更新这个json上的某些条目,例如:设置 Place 对于 PersonBRome 同样 PersonC 更新 cars 与数组["现代"、"福特"]`。

我到现在所做的是

import json

key1 ='PersonB'
key2 = 'PersonC'
filePath = "resources/test.json"
with open(filePath, encoding='utf-8') as jsonFile:
    jsonData = json.load(jsonFile)
    print(jsonData)

PersonBUpdate = {"Place" : "Rome"}
PersonCUpdate = {"cars" : ["Hyundai", "Ford"]}

jsonData[key1].append(PersonBUpdate)
jsonData[key2].append(PersonCUpdate)
print(jsonData)

它抛出了一个错误。

AttributeError: 'dict' object has no attribute 'append'
答案

list.append 是一种类型的方法 list,不 dict. 请务必查看完整的方法签名,以确定一个方法属于什么类型。

相反,我们可以使用 dict.update:

用其他键值对更新字典,覆盖现有键值。返回 None。

update() 接受另一个 dictionary 对象或键值对的迭代(作为长度为 2 的元组或其他迭代)。如果指定了关键字参数,那么字典将用这些键值对进行更新:d.update(red=1, blue=2)。

并在你的代码中这样使用这个方法。

jsonData[key1].update(PersonBUpdate)
jsonData[key2].update(PersonCUpdate)

这样就会得到预期的结果

{'PersonA': {'Age': '35', 'Place': 'Berlin', 'cars': ['Ford', 'BMW', 'Fiat']}, 'PersonB': {'Age': '45', 'Cars': ['Kia', 'Ford'], 'Place': 'Rome'}, 'PersonC': {'Age': '55', 'Place': 'London', 'cars': ['Hyundai', 'Ford']}}
另一答案

应该是这样的

jsonData['Person1']['Place'] = 'Rome'

Dictionary确实没有append方法. 只有列表才有。

或者用Python 3你可以这样做。

jsonData['Person1'].update(PersonBUpdate)

以上是关于在python中更新添加到json(嵌套)。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 更新嵌套 JSON 文件中的值?

如何使用Java更新JSON文件中的嵌套JSON对象?

JSON补丁更新嵌套对象

将 JSON 数组嵌套到 Python Pandas DataFrame

在特定对象级别将 pandas DataFrame 中的列添加到深度嵌套的 JSON 中

vue.js - 使用原始 json 中的嵌套数组时,递归组件不会更新