[英]Search multiple JSON files and extract values based on some condition in Java
我有一个场景,其中有多个 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"
}
}
}
}
}
我有一个条件来提取所有具有"Acronym": "SGML"
的GlossEntryID
我对 JSON 很陌生,所以任何线索都将不胜感激。
尝试下面的代码来解析 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();
}
如果您使用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 文件以组合这些结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.