所以我有以下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=(',', ': '))
)
有人可以帮助我
答案 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)