首页 > 解决方案 > 更新现有 JSON 文件

问题描述

在运行我的代码时,我试图通过添加额外的数据(package_id)来更新现有的 JSON 文件。这是现有的 json 内容:

{
  "1": {
    "age": 10,
    "name": [
      "ramsi",
      "jack",
      "adem",
      "sara",
    ],
    "skills": []
  }
}

我想插入一个新包,应该是这样的:

{"1": {
    "age": 10,
    "name": [
      "ramsi",
      "jack",
      "adem",
      "sara",
    ],
    "skills": []
  } "2": {
    "age": 14,
    "name": [
      "maya",
      "raji",
    ],
    "skills": ["writing"]
  }
}

问题是当我添加它添加的新数据时 - > ({) 所以(一个顶级值)被添加了两次,这是 JSON 标准所不允许的

    {"1": {
    "age": 10,
    "name": [
      "ramsi",
      "jack",
      "adem",
      "sara",
    ],
    "skills": []
  }} {"2": {
    "age": 14,
    "name": [
      "maya",
      "raji",
    ],
    "skills": ["writing"]
  }
}

这是我添加新的(package_id)的代码:

        list1[package_id] = {"age": x, "name": y, "skills": z}
        ss = json.dumps(list1, indent=2)
            data = []
            with open('file.json', 'r+') as f:
                data = json.loads(f.read())
                data1 = json.dumps(data, indent=2)
                f.seek(0) 
                f.write(data1)
                f.write(ss)
                f.truncate()
                

我两次写入文件,因为如果我没有存储现有内容并再次写入,那么它将删除旧数据并仅保留 package_id 编号 2

标签: pythonjson

解决方案


它不是那样工作的。您不能通过附加另一个 JSON 记录来添加到 JSON 记录。JSON 文件总是只有一个对象。您需要修改该对象。

with open('file.json','r') as f:
    data = json.loads(f.read())
data[package_id] = {'age':x, 'name':y, 'skills':z}
with open('file.json','w') as f:
    f.write(json.dumps(data,indent=2))

推荐阅读