我有一个场景,其中有多个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非常陌生,所以不胜感激。
尝试下面的代码来解析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文件以合并这些结果。