添加json元素顶部的其他键

时间:2018-04-07 00:11:27

标签: python json python-3.x

我有类似这样的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()

2 个答案:

答案 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()