代码之家  ›  专栏  ›  技术社区  ›  Abhishek

基于java中的值读取特定对象[duplicate]

  •  -1
  • Abhishek  · 技术社区  · 7 年前

    我有一些json数据

    {
     "attributesMappings": [
       {
         "domainType": "WI",
         "attribute": [
           {
            "staticAttributes": [
              {
                "attributeName": "test",
                "attributeValue": "test",
                "required": true
               }
             ]
           }
         ]
       },
       {
         "domainType": "PI",
         "attribute": null
       }
     ]
    }
    

    我可以用

    JSONArray vendorData = mainObj.getJSONArray("attributesMappings");
    

    假设我只想得到domain type=“WI”所在的对象,我知道可以使用

    JSONObject obj = vendorData.getJSONObject(0);
    

    我们可以这样做吗?在getJSONObject中使用“WI”或者类似的东西,我就可以得到完整的对象。

    JSONObject domainType = attributeMappings.getJSONObject("WI");
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Stephen C    7 年前

    阿飞,没有 效率更高 搜索JSON对象树的方法,而不是迭代它。但与解析对象树的成本相比,搜索的成本实际上很小。

    您可能会比使用基于流的解析器的“parse to JSONObject”做得更好,并对解析事件处理程序进行编码以查找要提取的信息。如果您要查找的信息接近JSON序列化的开头,那么您可以通过在搜索“命中”后立即放弃解析来节省时间。

    如果只对JSON进行一次搜索,那么就到此为止。

    如果要重复搜索同一个JSON,那么获得更好性能的方法是:

    1. 解析JSON树,或者将其映射到POJO树
    2. 为内存树构造单独的索引数据结构。
    3. 使用索引加快搜索速度。

    因此,在您的示例中,可以基于 domainType 现场。

    或者,提取 只是 将所需的信息导入为您的需要而设计的数据结构中。


    有一些库与XQuery和XPath for JSON相当。这种方法绝对是可行的 更方便 而不是编写一堆迭代代码;例如(来自@cricket\u007的评论):

    JSONPath查询 会是 $.attributesMappings[?(@.domainType == "WI")]

    更多信息: Query a JSONObject in java

    效率更高