【问题标题】:Updating/Appending to json (nested) in python在python中更新/附加到json(嵌套)
【发布时间】:2020-08-05 15:05:58
【问题描述】:

我的 JSON 文件如下所示

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

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

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

我正在尝试更新此 json 中的某些条目,例如将PlacePersonB 设置为Rome 类似地为PersonC 更新cars 使用数组["Hyundai", "Ford"]`

到目前为止我所做的是

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'

【问题讨论】:

  • 好吧,就是这样:dicts 没有append 方法。但是,有update 方法

标签: python json list dictionary


【解决方案1】:

应该是这样的:

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

字典确实没有 append 方法。只有列表可以。

或者使用 Python 3,您可以这样做:

jsonData['Person1'].update(PersonBUpdate)

【讨论】:

    【解决方案2】:

    list.appendlist 类型的方法,而不是dict。始终确保查看完整的方法签名以了解方法所属的类型。

    我们可以使用dict.update:

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

    update() 接受另一个字典对象或键/值对的可迭代对象(作为元组或其他长度为 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']}}
    

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2012-11-25
      相关资源
      最近更新 更多