有一个像这样的json:
{ "P1": "ss", "Id": 1234, "P2": { "P1": "cccc" }, "P3": [ { "P1": "aaa" } ] }
如何在P1不迭代所有json的情况下找到all 的值?
P1
PS:P1可以在json中的任何位置。
如果没有方法可以做到这一点,您能告诉我如何遍历json吗?
我对这个问题的处理方式会有所不同。
由于JSON不允许深度优先搜索,因此将json转换为Python对象,将其提供给XML解码器,然后提取要搜索的Node
from xml.dom.minidom import parseString import json def bar(somejson, key): def val(node): # Searches for the next Element Node containing Value e = node.nextSibling while e and e.nodeType != e.ELEMENT_NODE: e = e.nextSibling return (e.getElementsByTagName('string')[0].firstChild.nodeValue if e else None) # parse the JSON as XML foo_dom = parseString(xmlrpclib.dumps((json.loads(somejson),))) # and then search all the name tags which are P1's # and use the val user function to get the value return [val(node) for node in foo_dom.getElementsByTagName('name') if node.firstChild.nodeValue in key] bar(foo, 'P1') [u'cccc', u'aaa', u'ss'] bar(foo, ('P1','P2')) [u'cccc', u'cccc', u'aaa', u'ss']