无法删除JSON中的密钥

时间:2017-01-18 12:50:54

标签: python json python-2.7 python-3.x

所以我有以下JSON:

{
  "root" : {
    "111111" : {
      "sampleKey" : true
    },
    "222222" : {
      "sampleKey" : false
    },
    "333333" : {
      "sampleKey" : true
    },
    "444444" : {
      "sampleKey" : false
    }
  }
}

我正在尝试删除 sampleKey false 的所有元素,然后保存更新的JSON文件,但我的代码不起作用,我正在尝试弄清楚我做错了什么:

import json

output_file = open('input_file.json').read()
output_json = json.loads(output_file)

for i in xrange(len(output_json["root"])):
    if(output_json["root"][i]["signedUp"] == "false"):
        output_json.pop(output_json[i])
        break

open("updated-file.json", "w").write(json.dumps(obj, sort_keys=True, indent=4, separators=(',', ': '))
)

有人可以帮助我

4 个答案:

答案 0 :(得分:1)

首先,output_json["root"]是一个字典,你用整数索引它。其次,作为一种更加pythonic的方式,您最好迭代您的项目并保留所需的项目:

new_dict = {key: value for key, value in output_json["root"].items() if value['sampleKey']}

如果您的所有商品都没有sampleKey,则可以使用dict.get()代替直接索引。

new_dict = {key: value for key, value in output_json["root"].items() 
            if value.get('sampleKey', True)} 

答案 1 :(得分:1)

你的root是一个dict而不是一个列表所以你可能不会使用整数索引。这是更新的代码

import json

output_json = json.load(open('input_file.json'))
for key in output_json["users"].keys():
    if(not output_json["users"][key].get("signedUp",True)):
        print "deleting",key
        del(output_json["users"][key])

json.dump(output_json,open('updated-file.json','w'))

PS:在您的示例中,您提到sampleKey而不是signedUp

答案 2 :(得分:0)

另一个也许你可以推荐它。

output_json['root'] = {x: output_json['root'][x] for x in output_json['root'] if output_json['root'][x]['sampleKey']}

我认为这比你的方式简单。

答案 3 :(得分:-2)

尝试更改:

output_json.pop(output_json[i])  

为:

output_json.pop(i)