如何从Python函数中包含特定值的JSON字符串的所有元素中删除所有键

如何从Python函数中包含特定值的JSON字符串的所有元素中删除所有键,python,Python,如何删除值为“NONE”的所有元素下的所有键,因此在本例中为busCode、effectivedate和col1。示例Json和我尝试的python代码粘贴在这里 { "colo": { "TrBus":{ "trade": "Test999", "busCode": "NONE", "Trtype": "XXX", "sortOrder": "78654", "effectivedate": "NONE", "expirationdate":

如何删除值为“NONE”的所有元素下的所有键,因此在本例中为busCode、effectivedate和col1。示例Json和我尝试的python代码粘贴在这里

  {
  "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中的值:
2
del 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'}}}