当前位置: 首页 > 面试题库 >

如何通过键查找特定的json值?

柴嘉禧
2023-03-14
问题内容

有一个像这样的json:

{
  "P1": "ss",
  "Id": 1234,
  "P2": {
      "P1": "cccc"
  },
  "P3": [
      {
          "P1": "aaa"
      }
  ]
}

如何在P1不迭代所有json的情况下找到all 的值?

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']


 类似资料:
  • 问题内容: 我有两个域,是一对多关系中的一部分。我想知道如何查询孩​​子的父母FK吗?贝娄是父母/孩子的伪代码 上级: 儿童: 尽管我没有明确创建FK,但是grails会自行创建MySQL数据库。但是,当我想像这样通过FK查询孩子时: 我收到一个错误:找不到类[class mgr.AlumLanguage]的名称[alumProfileId]的属性 关于如何做到这一点的任何建议? 谢谢杰森 问题答

  • 问题内容: 我期望我的jQuery代码使用此JSON: 这些数据将来自MySql表 : SQL查询应该是什么,以便输出 1个平面表 ,可以很容易地将其转换为JSON(在PHP或JavaScript / jQuery中)? 我什至以正确的方式走这条路吗? 问题答案: 您可以直接从MySQL生成JSON内容。这是可与MySQL 5.7或更高版本一起使用的解决方案。 首先,coonsider函数,该函数

  • 我有一个JSON对象,如下所示: 我想检查是否存在一个值为“id2”的id,java中是否有任何UTIL允许我这样做,而无需遍历所有对象并将字符串与目标进行比较? 附言:我不想知道“id”字段是否存在,使用JSONObject.has(键),这不是我要问的。

  • 问题内容: 我正在这个大型数据库上工作,该数据库具有很多SP中嵌入的业务知识[我知道!],并且SP之间有很多链接。即一个存储的过程调用另一个。 我想找出更新特定列的存储过程的列表。我该怎么做。 对于存储过程,如SQL表和分析器列中所述使用showplan_All 对我来说不起作用,因为这是一个共享的dev db。 如上所述,使用来自主数据库的Sp扫描系统文本中的Sp是不可行的,因为我无权访问主数据

  • 我正在使用jpa的criteriabuilder,希望在jsonb列中查找json字段的值。jsonb如下所示: 我开始创建我的谓词,但我得到了错误。 我得到的错误是 psqlException:错误:函数json_extract(jsonb,字符变化)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 有人能帮忙吗?

  • 我有一个微服务,它主要使用与其他微服务对话。使用Eureka的服务发现机制,这项工作非常出色。 现在我迫切需要使用连接到外部系统,并且仍然使用如下所示的配置执行负载平衡。 : : 从我看过的许多文档中,建议禁用eureka以允许从可用的服务器列表中获取负载平衡。我做了跟进,并使用以下配置禁用它。 : 这使我能够为针对外部系统的外部客户端执行负载平衡,但需要使用服务发现的所有其他外部客户端都已中断。