使用Python更新JSON文件属性
我正在尝试用Python脚本更新test.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", "
“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文件中遗漏了一部分:(你能修改答案吗?)非常感谢