使用Python更新JSON文件属性

使用Python更新JSON文件属性,python,json,Python,Json,我正在尝试用Python脚本更新test.json文件。我只需要将“plan2”->“2”->“rooms”的属性更改为3。你能帮我做这个吗? 多谢各位 test.json { "plan1" : [{ "1": { "rooms":"2", "bathrooms":"1", "kitchens":"1" }, "2": { "rooms":"1", "bathrooms":"1", "

我正在尝试用Python脚本更新test.json文件。我只需要将
“plan2”->“2”->“rooms”
的属性更改为3。你能帮我做这个吗? 多谢各位

test.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"
      }
}]
}
test.py

import json

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

    # need to change the "plan2"->"apartments"->"2"->"rooms" to 3 

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

您正在修改内存中的数据结构,而不是文件本身。为了完全安全,请分四个步骤执行此操作:

  • 将文件读入内存
  • 对数据结构进行更改
  • 将更改写回新文件
  • 写入成功完成后,用新文件替换旧文件
  • 把它放在一起,

    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文件位于同一文件系统上,因此
    重命名操作是原子操作。如果不是这样,请使用
    NamedTempfile
    dir
    参数指定同一文件系统上的目录。

    您正在修改内存中的数据结构,而不是文件本身。为了完全安全,请分四个步骤执行此操作:

  • 将文件读入内存
  • 对数据结构进行更改
  • 将更改写回新文件
  • 写入成功完成后,用新文件替换旧文件
  • 把它放在一起,

    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文件位于同一文件系统上,因此
    重命名操作是原子操作。如果不是这种情况,请使用
    NamedTempfile
    dir
    参数指定同一文件系统上的目录。

    不是python答案,但如果系统上有可用的,可以使用以下方法:

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

    不是python的答案,但如果您的系统上有可用的,您可以使用以下方法:

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

    应该是
    数据['apartments'][0]['2']['rooms']=3
    如上所述:
    “apartments”->“2”->“rooms”
    很抱歉,我忘了添加json文件的一部分。你能修改一下答案吗?非常感谢much@brabbit640您可以更新您想要更改
    房间
    值的
    计划
    吗。@brabbit640我认为
    json
    数据有问题。您的
    json
    有重复的
    id
    键。将其维护为一个
    json数组
    @brabbit640更新了答案。它应该是
    data['plants'][0]['2']['rooms']=3
    如上所述:
    “plants”->“2”->“rooms”
    对不起,我忘了添加json文件的一部分。你能修改一下答案吗?非常感谢much@brabbit640您可以更新您想要更改
    房间
    值的
    计划
    吗。@brabbit640我认为
    json
    数据有问题。您的
    json
    有重复的
    id
    键。将其作为一个
    json数组进行维护
    @brabbit640更新了答案。是的,它可以工作!非常感谢,但在我的实际test.json中还有另一个“id”:plan2。我修改了问题。是的,它有效!非常感谢,但在我的实际test.json中还有另一个“id”:plan2。我修改了问题。真的很抱歉我的json文件中遗漏了一部分:(你能修改答案吗?)非常抱歉我的json文件中遗漏了一部分:(你能修改答案吗?)非常感谢