<p>以下是2rs2ts的答案的修改版本,它返回一个新对象而不是修改旧对象(并处理非叶节点上的过滤):</p>
<pre><code>import copy
def fltr(node, vals):
if isinstance(node, dict):
retVal = {}
for key in node:
if key in vals:
retVal[key] = copy.deepcopy(node[key])
elif isinstance(node[key], list) or isinstance(node[key], dict):
child = fltr(node[key], vals)
if child:
retVal[key] = child
if retVal:
return retVal
else:
return None
elif isinstance(node, list):
retVal = []
for entry in node:
child = fltr(entry, vals)
if child:
retVal.append(child)
if retVal:
return retVal
else:
return None
</code></pre>
<p>带着这个,你会打电话来的</p>
^{pr2}$
<p>然后得到</p>
<pre><code>{
"field": [
{
"inf_tabelado": {
"dropdown_value": ""
},
"nm_field": "ch_origem_sistema_chave"
},
{
"inf_tabelado": {
"dropdown_value": ""
},
"nm_field": "ax_andamento_data"
}
],
"url_app": "/docspro",
"_metadata": {
"dt_reg": "22/01/2014 16:17:16"
}
}
</code></pre>
<p>请注意,如果所有内容都被过滤,则返回<code>None</code>。例如</p>
<pre><code>fltr(x, [])
</code></pre>
<p>将始终返回<code>None</code>,无论<code>x</code>中是什么。在</p>