如何使用Java从Json字符串中提取Json值?

如何使用Java从Json字符串中提取Json值?,java,arrays,json,string,arraylist,Java,Arrays,Json,String,Arraylist,这是我的json结构,我想从数组中的每个json对象中获取hierarchy_name的值,有人能帮我使用Java吗 { "hits": { "total": { "value": 218 }, "max_score": null, "hits": [ { "_index": "planlytx", &quo

这是我的json结构,我想从数组中的每个json对象中获取hierarchy_name的值,有人能帮我使用Java吗

  {
 "hits": {
  "total": {
   "value": 218
  },
  "max_score": null,
  "hits": [
   {
    "_index": "planlytx",
    "_source": {
     "hierarchy_name": "PRODUCT"
    },
    "fields": {
     "attribute_name.keyword": [
      "PRODUCT"
     ]
    }
   },
   {
    "_index": "planlytx",
    "_source": {
     "hierarchy_name": "PRODUCT"
    },
    "fields": {
     "attribute_name.keyword": [
      "PRODUCT-ALL"
     ]
    }
   }
  ]
 }
}
使用,您可以执行以下操作:

JSONArray hitsArray = new JSONObject(jsonStr).getJSONObject("hits").getJSONArray("hits");

List<String> keywords = IntStream.range(0, hitsArray.length())
        .mapToObj(hitsArray::getJSONObject)
        .map(json -> json.getJSONObject("fields")
                .getJSONArray("attribute_name.keyword")
                .toList())
        .flatMap(objects -> objects.stream().map(Object::toString))
        .collect(Collectors.toList());

任何我们可以改进的工作,也许是一些代码?这看起来像是elasticsearch的结果,为什么不使用他们的java api呢?关于如何实现ithowever,请参阅本文。如果不想使用elasticsearch库,则必须使用类似或的JSON解析器。(我不是Baeldung的下属,我认为他们只是有很棒的教程;))这个需求的任何示例代码都不使用elasticsearch@LinoDoes这能回答你的问题吗?如果我们想找到你的名字,我们应该怎么做@BuildSlayer@Nitesh您需要更新.map(),这样就需要新的字段。请使用一些伪代码帮助获取hierarchy_name@BuildSlayer。我已经尝试过了,但是遇到了一个异常…请更新您的问题,已经更新
JSONArray hitsArray = new JSONObject(jsonStr).getJSONObject("hits").getJSONArray("hits");

List<String> keywords = IntStream.range(0, hitsArray.length())
        .mapToObj(hitsArray::getJSONObject)
        .map(json -> json.getJSONObject("_source").getString("hierarchy_name"))
        .collect(Collectors.toList());
[PRODUCT, PRODUCT-ALL]