简体   繁体   English

如何使用java遍历嵌套的JSON数据

[英]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 数据文件中获取AlphaBetaGamma的值。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM