我有类似这样的json文件。
{
"SomethingA": {
"SomethingB": {
"SomethingC": {
"C-property": "something",
"C-property2": {}
}
}
}
}
我想在" Something C"之上添加一些新数据。 as" NEWSomethingC"
所以它应该是
{
"SomethingA": {
"SomethingB": {
"NEWSomethingC": {
"NEWC-property": "NEWsomething",
"NEWC-property2": {}
},
"SomethingC": {
"C-property": "something",
"C-property2": {}
}
}
}
}
好的,这是问题所在。我无法在键顶部添加新值。总是,NEWSomethingC将出现在SomethingC之下。
我用来添加的代码......
with open(credantials.init['config'], 'r+') as f:
data = json.load(f)
try:
old_data = data['SomethingA'][SomethingB]
append_data = data['SomethingA'][SomethingB]
old_data = {NEWSomethingC :{'C-property':something, 'C-Property2':{}}}
except KeyError:
print ('There is no key you want to search here')
append_data.update(old_data)
print(append_data)
f.seek(0)
json.dump(data,f, indent=4)
f.truncate()
答案 0 :(得分:1)
正如已经指出的那样,python中的字典是无序的。因此我们必须使用OrderedDict
正如本answer中所述,我们可以使用object_pairs_hook
json.loads()
中的参数加载为OrderdDicts
。然后我们可以在我们的“OrderdJsonDictionary”中添加一个新字典,并使用move_to_end
函数将我们添加的字典移到开头
with open(credantials.init['config'], 'r+') as f:
data = json.load(f, object_pairs_hook=OrderedDict)
new_data = {'newc':{
"NEWC-property": "NEWsomething",
"NEWC-property2": {}
}
}
data["SomethingA"]["SomethingB"].update(new_data)
# last=False moves to the beginning
data["SomethingA"]["SomethingB"].move_to_end(list(new_data.keys())[0], last=False)
f.seek(0)
json.dump(data,f, indent=4)
f.truncate()
答案 1 :(得分:0)
所以你想要做的就是读取数据,搜索数据到你希望插入的位置。 1.将该数据写入新文件 2.将新插入添加到新文件中 3.将其余文件内容添加到新文件中 4.删除旧文件
因此,为了写入文件,您需要在代码中插入以下内容。
outfile = open('file.json')
json.dump(data, outfile)
outfile.close()