根据Java中的某些条件搜索多个JSON文件并提取值

问题描述 投票:-2回答:2

我有一个场景,其中有多个JSON文件。我想从所有符合我提供的条件的JSON文件中提取值。

例如:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

我有条件提取所有具有GlossEntryID"Acronym": "SGML"

我对JSON非常陌生,所以不胜感激。

java json extract
2个回答
1
投票

尝试下面的代码来解析json并检查条件

try {
        String json = "{" +
                "    \"glossary\": {" +
                "        \"title\": \"example glossary\"," +
                "        \"GlossDiv\": {" +
                "            \"title\": \"S\"," +
                "            \"GlossList\": {" +
                "                \"GlossEntry\": {" +
                "                    \"ID\": \"SGML\"," +
                "                    \"SortAs\": \"SGML\"," +
                "                    \"GlossTerm\": \"Standard Generalized Markup Language\"," +
                "                    \"Acronym\": \"SGML\"," +
                "                    \"Abbrev\": \"ISO 8879:1986\"," +
                "                    \"GlossDef\": {" +
                "                        \"para\": \"A meta-markup language, used to create markup languages such as DocBook.\"," +
                "                        \"GlossSeeAlso\": [\"GML\", \"XML\"]" +
                "                    }," +
                "                    \"GlossSee\": \"markup\"" +
                "                }" +
                "            }" +
                "        }" +
                "    }" +
                "}";

        // parse the whole JSON string into JSONObject
        JSONObject obj = new JSONObject(json);
        // retrieve glossary obj from JSON
        JSONObject glossary = obj.getJSONObject("glossary");
        // retrieve GlossDiv obj from glossary
        JSONObject GlossDiv = glossary.getJSONObject("GlossDiv");
        // retrieve GlossList obj from GlossDiv
        JSONObject GlossList = GlossDiv.getJSONObject("GlossList");
        // retrieve GlossEntry obj from GlossList
        JSONObject GlossEntry = GlossList.getJSONObject("GlossEntry");
        // Check condition
        if (GlossEntry.getString("Acronym").equalsIgnoreCase("SGML")) {
            String id = GlossEntry.getString("ID");
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

0
投票

如果使用Jayway JsonPath,则可以按照以下步骤简单地实现:

Maven依赖性

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>

代码段

DocumentContext jsonContext = JsonPath.parse(jsonStr);
List<String> idList = jsonContext.read("$.glossary.GlossDiv.GlossList.GlossEntry[?(@.Acronym == 'SGML')].ID");
System.out.println(idList.toString());

控制台输出

[“ SGML”]

然后您可以顺序或并行读取这些JSON文件以合并这些结果。

© www.soinside.com 2019 - 2024. All rights reserved.