使用Python更新JSON文件属性

2024-09-27 00:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着更新json测试使用Python脚本编写文件。我只需要将"plan2"->"2"->"rooms"的属性更改为3。你能帮我拿这个吗? 非常感谢

在json测试在

{
"plan1" : [{
      "1": {
      "rooms":"2",
      "bathrooms":"1",
      "kitchens":"1"
      },

      "2": {
      "rooms":"1",
      "bathrooms":"1",
      "kitchens":"1"
      }
}],
"plan2":[{
      "1": {
      "rooms":"3",
      "bathrooms":"1",
      "kitchens":"1"
      },

      "2": {
      "rooms":"1",
      "bathrooms":"1",
      "kitchens":"1"
      }
}]
}

在测试.py在

^{pr2}$

Tags: 文件py脚本json属性roomspr2bathrooms
3条回答

修改的是内存中的数据结构,而不是文件本身。为了完全安全,请分四步进行:

  1. 把文件读入内存
  2. 对数据结构进行更改
  3. 将更改写回文件
  4. 写入成功完成后,用新文件替换旧文件。在

把它放在一起

import json
import tempfile

with open("test.json") as f:
    data = json.loa(f)

data['apartments'][0]['2'][rooms] = 3

with tempfile.NamedTemporaryFile(delete=False) as f:
    json.dump(data, f)
    os.rename(f.name, "test.json")

这假设您的临时目录与JSON文件位于同一文件系统中,因此rename操作是原子操作。如果不是这样,请使用dir参数NamedTempfile来指定一个在同一文件系统上的目录。在

不是python的答案,但是如果您的系统上有^{}可用,可以使用以下命令:

jq '.plan2[]."2".rooms="3"' test.json

Demo on jqplay

import json

with open("test.json", "r+") as jsonFile:
    data = json.load(jsonFile)

    # The change
    d['plan2'][0]['1']['rooms'] = 3

    jsonFile.seek(0)
    json.dump(data, jsonFile)
    jsonFile.truncate()

相关问题 更多 >

    热门问题