如何从Python函数中包含特定值的JSON字符串的所有元素中删除所有键
如何删除值为“NONE”的所有元素下的所有键,因此在本例中为busCode、effectivedate和col1。示例Json和我尝试的python代码粘贴在这里如何从Python函数中包含特定值的JSON字符串的所有元素中删除所有键,python,Python,如何删除值为“NONE”的所有元素下的所有键,因此在本例中为busCode、effectivedate和col1。示例Json和我尝试的python代码粘贴在这里 { "colo": { "TrBus":{ "trade": "Test999", "busCode": "NONE", "Trtype": "XXX", "sortOrder": "78654", "effectivedate": "NONE", "expirationdate":
{
"colo": {
"TrBus":{
"trade": "Test999",
"busCode": "NONE",
"Trtype": "XXX",
"sortOrder": "78654",
"effectivedate": "NONE",
"expirationdate": "31-DEC-9999"
}
"TrCol":{
"Col1": "NONE",
"Col2": "Conf"
} }
}
我一开始是这样做的,但没有达到预期效果
def constructJson(jsonstr):
jdata = json.load(jsonstr)
for key, value in jsonstr:
if value == 'NULL':
del key
return jdada
尝试:
此解决方案创建一个递归函数来迭代dict并删除“NONE”:
def del_none(obj):
for key, value in obj.copy().items():
if isinstance(obj[key], dict):
obj[key] = del_none(obj[key])
else:
if value == 'NONE':
del obj[key]
return obj
将原始词典定义为:
original_dict = { "colo": {
"TrBus":{
"trade": "Test999",
"busCode": "NONE",
"Trtype": "XXX",
"sortOrder": "78654",
"effectivedate": "NONE",
"expirationdate": "31-DEC-9999"
},
"TrCol":{
"Col1": "NONE",
"Col2": "Conf"
}
}
}
并调用该函数:
new_dict = del_none(original_dict)
它产生以下输出:
new_dict
{'colo': {'TrBus': {'Trtype': 'XXX',
'expirationdate': '31-DEC-9999',
'sortOrder': '78654',
'trade': 'Test999'},
'TrCol': {'Col2': 'Conf'}}}
1.
对于键,jsonstr:
中的值应该是对于键,jdata中的值:
2del key
应该是deljdata[key]
和3。这不是递归的(也就是说,它不处理嵌套值),与您的非常相似。您可以用替换不是None
!=“无”
在接受的答案中,然后返回remove\u NONE(jdata)
将起作用。此解决方案有效。感谢Borisy,我们的函数没有返回新的dict-它修改了原始的就地dict。事实上,我没有在递归调用中更新元素。感谢您指出这一点,@ekhumero.Thank you Daniel,这个解决方案也起了作用。有没有办法在不知道密钥路径的情况下将嵌套JSON结构中任意位置的“testvalue”更新为“newvalue”?您可以在else条件下添加以下代码:if value='testvalue':obj[Key]='newvalue'
new_dict
{'colo': {'TrBus': {'Trtype': 'XXX',
'expirationdate': '31-DEC-9999',
'sortOrder': '78654',
'trade': 'Test999'},
'TrCol': {'Col2': 'Conf'}}}