Python 无法删除JSON中的键
因此,我有以下JSON:Python 无法删除JSON中的键,python,json,python-2.7,python-3.x,Python,Json,Python 2.7,Python 3.x,因此,我有以下JSON: { "root" : { "111111" : { "sampleKey" : true }, "222222" : { "sampleKey" : false }, "333333" : { "sampleKey" : true }, "444444" : { "sampleKey" : false } } } 我试图删除sampleKey为fal
{
"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=(',', ': '))
)
有人能帮我改变一下吗
output_json.pop(output_json[i])
致:
首先,
output\u json[“root”]
是一个字典,您使用整数对它进行索引。其次,作为一种更具python风格的方式,您最好迭代您的项目,并保留所需的项目:
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)}
您的根是一个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
另一个可能您可以参考它
output_json['root'] = {x: output_json['root'][x] for x in output_json['root'] if output_json['root'][x]['sampleKey']}
我认为这比你的方法简单。
output\u json[“root”]
是一个字典,你正在用整数索引它!请注意,输出_json是Python指令。原始json文件中的true
和false
值现在将是Python布尔值true
和false
。除了关于引用dict值的注释(Kasramvd的答案很好),还要注意所使用的数据类型。您的所有项目都将无法通过==“false”
测试,因为您正在比较布尔值和字符串。我希望将它们作为JSON保留在与原始文件相同的结构中,只希望不需要的元素消失。我运行了你的代码,但它说:keyrerror:'sampleKey'
@SomeAndroidProgrammar,可能不是所有的子字典都有ot@SomeAndroidProgrammar正如火山所说,可能不是所有的子字典都有。千万不要和False相比!如果不是更好的话就使用。看在上帝的份上,使用布尔运算符为False
明确了此处的问题。它读的是谁的sampleKey是false
你让我怀疑你不完全理解if是如何工作的。你在写多余的代码!Python,使用not运算符
output_json['root'] = {x: output_json['root'][x] for x in output_json['root'] if output_json['root'][x]['sampleKey']}