Python:在JSON中查找一个节点,如果不是,则输入该节点

Python:在JSON中查找一个节点,如果不是,则输入该节点,python,json,python-2.7,Python,Json,Python 2.7,我目前在使用Python2.7解决这个问题时遇到了问题。基本上,我需要检查父节点中是否存在子节点。如果是,则只打印键和值,如果不是,则插入具有键和值的子节点 json结构如下所示: { "Movies": { "Drama": { "main": { "actor": "MR x", "actress": "Miss Y" } }, "Action": { "Aux": {

我目前在使用Python2.7解决这个问题时遇到了问题。基本上,我需要检查父节点中是否存在子节点。如果是,则只打印键和值,如果不是,则插入具有键和值的子节点

json结构如下所示:

{
"Movies": {
    "Drama": {
        "main": {
            "actor": "MR x",
            "actress": "Miss Y"
        }
    },
    "Action": {
        "Aux": {
            "director": "MR J",
            "Producer": "Mr K"
        },
        "main": {
            "actor": "MR yyyy",
            "actress": "Mrs XXXX"
        }
    }
  },

  "Serial":{-------
    ...................
   }
}
在上面的json结构中,我需要首先检查子节点Aux是否存在,如果不存在,那么我需要添加整个块

        "Aux": {
            "director": "MR J",
            "Producer": "Mr K"
        },
在操作节点内部。 我怎么能做到呢,到目前为止我已经做到了

try:
    json_file = ('record.json')
    with open(json_file,'r+') as data_file:    
        data = json.load(data_file)
        for item in parent:

except Exception, e:
    print e
我怎样才能解决这个问题


提前感谢。

您可以检查JSON字典中是否有Aux,如果没有,您可以添加:

try:
    json_file = ('record.json')
    with open(json_file,'r+') as data_file:    
        data = json.load(data_file)
        if 'Aux' not in data:
          data['Movies']['Action']['Aux'] = {"director": "MR J", "Producer": "Mr K"}

except Exception, e:
    print e

你把问题分成两个步骤。阅读和写作。 在第一步中,您可以检查“Aux”是否已在键中。如果没有,请添加它。 然后,您只需打开文件进行写入,并将清理后的数据写入其中:

import json

with open("record.json", "r") as infile:
    data = json.load(infile)
    for genre in data:
        for movie_genre in data[genre]:
            if "Aux" not in data[genre][movie_genre].keys():
                data[genre][movie_genre]["Aux"] = {"director": "MR J", "Producer": "Mr K"}

with open("record.json", "w") as outfile:
    outfile.write(json.dumps(data, indent=2))

您只想检查电影中的子节点,对吗?嗯,更详细地说,还有更多节点,如连续剧、纪录片等,电影就是其中之一。***我编辑了问号,但我确实回答了问题。硬代码部分始终可以参数化或变量化。很好,非常感谢您您的方法是最好的,解决了我的问题有一个小故障,如果发现节点AUX,我尝试打印,但不知怎的,响应打印了20多次。为什么会这样?我怎样才能用openrecord.json,r作为infle:data=json.loadinfle for genre in data:for movie_genre in data[genre]:如果Aux不在data[genre][movie_genre]。key:print'\n--没有Aux,因此添加新节点'data[genre][movie genre][Aux]={导演:J先生,制片人:K先生}使用openrecord.json,w作为outfile:outfile.writejson.dumpsdata,indent=2 else:print'\n无需添加辅助'@k-nut:这是链接,如果有子节点,最后一行将被打印机打印20多次。是的,因为这是为每个不需要的节点打印的添加。您还应将写入文件移出,如下所示: