我对这个问题的处理方式会有所不同。
由于JSON不允许深度优先搜索,因此将json转换为Python对象,将其提供给XML解码器,然后提取要搜索的Node
from xml.dom.minidom import parseStringimport 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']


