[英]How to Traverse in the nested JSON data using java
I'm trying to get the values of Alpha
, Beta
and Gamma
from a nested JSON data file.我正在尝试从嵌套的 JSON 数据文件中获取Alpha
、 Beta
和Gamma
的值。
I'm trying get the Alpha
value using something like this我正在尝试使用这样的方法获取Alpha
值
Object o = new JSONParser().parse(new FileReader(newFile("C:\\Users\\abc\\Documents\\file.json")));
JSONObject jo = (JSONObject) o;
JSONArray resultCode = (JSONArray) jo.get("mkDetails");
JSONObject x = (JSONObject) resultCode.get(0);
x.get("Alpha").toString()
This is the JSON:这是 JSON:
{
"metadata": {
"offset": 0,
"psize": 10
},
"svc": [
{
"mNumber": "225",
"markIp": {
"Name": "Ant",
"eDate": "3006-08-01",
"cDate": "9999-12-31"
},
"mkDetails": [
{
"Alpha": "D",
"Beta": "S"
}
],
"mNetDetails": [
{
"Gaama": "213",
"mkTypeCode": "23"
}
]
}
],
"serviceFault": {
"faultType": null,
"faultCode": null,
"message": null
}
}
Here is a possible solution.这是一个可能的解决方案。 I'm using Gson lib from google.我正在使用谷歌的 Gson 库。 You can import via maven.您可以通过 maven 导入。
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
Here is the code that parses your JSON.这是解析您的 JSON 的代码。
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public static void parseJson (){
String thisJson ="{\r\n" +
" \"metadata\": {\r\n" +
" \"offset\": 0,\r\n" +
" \"psize\": 10\r\n" +
" },\r\n" +
" \"svc\": [\r\n" +
" {\r\n" +
" \"mNumber\": \"225\",\r\n" +
" \"markIp\": {\r\n" +
" \"Name\": \"Ant\",\r\n" +
" \"eDate\": \"3006-08-01\",\r\n" +
" \"cDate\": \"9999-12-31\"\r\n" +
" },\r\n" +
" \"mkDetails\": [\r\n" +
" {\r\n" +
" \"Alpha\": \"D\",\r\n" +
" \"Beta\": \"S\"\r\n" +
" }\r\n" +
" ],\r\n" +
" \"mNetDetails\": [\r\n" +
" {\r\n" +
" \"Gaama\": \"213\",\r\n" +
" \"mkTypeCode\": \"23\"\r\n" +
" }\r\n" +
" ]\r\n" +
" }\r\n" +
" ],\r\n" +
" \"serviceFault\": {\r\n" +
" \"faultType\": null,\r\n" +
" \"faultCode\": null,\r\n" +
" \"message\": null\r\n" +
" }\r\n" +
"}";
Gson gson = new Gson();
JsonElement jelement = new JsonParser().parse(thisJson);
JsonObject jobject = jelement.getAsJsonObject();
JsonArray jarray = jobject.getAsJsonArray("svc");
jobject = jarray.get(0).getAsJsonObject();
JsonArray netDetailsArr = jobject.getAsJsonArray("mNetDetails");
JsonArray mkDetailsArr = jobject.getAsJsonArray("mkDetails");
jobject = netDetailsArr.get(0).getAsJsonObject();
String gamma = jobject.get("Gaama").getAsString();
System.out.println("gamma==>" + gamma);
jobject = mkDetailsArr.get(0).getAsJsonObject();
String alpha = jobject.get("Alpha").getAsString();
String beta = jobject.get("Beta").getAsString();
System.out.println("alpha ==>" + alpha);
System.out.println("beta ===>"+ beta);
}
console output :控制台输出:
gamma==>213
alpha ==>D
beta ===>S
You can't just do jo.get("mkDetails")
, because jo
has no key mkDetails
.你不能只做jo.get("mkDetails")
,因为jo
没有键mkDetails
。 You have to traverse every level of the tree yourself:你必须自己遍历树的每一层:
JSONObject root = ...;
JSONArray svc = (JSONArray) root.get("svc");
JSONObject svc0 = (JSONObject) svc.get(0);
JSONObject mkDetails = (JSONObject) svc0.get("mkDetails");
JSONObject mNetDetails = (JSONObject) svc0.get("mNetDetails");
String alpha = (String) mkDetails.get("Alpha");
String beta = (String) mkDetails.get("Beta");
String gamma = (String) mNetDetails.get("Gamma");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.