繁体   English   中英

如何在Java中解析嵌套的json数组

[英]how to parse nested json array in java

我想用Java解析netsted json:下面是json字符串:

[
    {
        "id": 1,
        "empid": "12345",
        "details": {
            "name": "xyz",
            "age": "30",
            "sex": "M",
            "Address": {
                "Office": "office",
                "Home": "Home"
            }
        },
        "abcDetails": "asdf",
        "mobile": 123455
    },
    {
        "id": 2,
        "empid": "64848",
        "details": {
            "name": "eryje",
            "age": 3027,
            "sex": "M",
            "Address": {
                "Office": "office",
                "Home": "Home"
            }
        },
        "abcDetails": "fhkdl",
        "mobile": 389928
    }
]

我需要名称,上面json的年龄详细信息,有人可以帮助您解析Java中的这些值,我尝试了以下代码来获取这些值-似乎是嵌套的,不确定如何获取这些值。

        JSONArray jsonarray = new JSONArray(str);
        for (int i = 0; i < jsonarray.length(); i++) {
            JSONObject obj1 = jsonarray.getJSONObject(i);

            String name = obj1.getString("name");
            String age = obj1.getString("age");

            System.out.println(name);
            System.out.println(age);
        }

您可能需要使用#getJSONObject()来获取嵌套对象。

  • 但是,这是我个人的印象,为什么org.json包的版本字符串是日期格式? 可能不是很好的图书馆...

例:

package testing;

import org.json.JSONArray;
import org.json.JSONObject;

/**
 * Hello world!
 */
public class App {

    static String json = ""
 + "["
 + " {"
 + "     \"id\": 1,"
 + "     \"empid\": \"12345\","
 + "     \"details\": {"
 + "         \"name\": \"xyz\","
 + "         \"age\": \"30\","
 + "         \"sex\": \"M\","
 + "         \"Address\": {"
 + "             \"Office\": \"office\","
 + "             \"Home\": \"Home\""
 + "         }"
 + "     },"
 + "     \"abcDetails\": \"asdf\","
 + "     \"mobile\": 123455"
 + " },"
 + " {"
 + "     \"id\": 2,"
 + "     \"empid\": \"64848\","
 + "     \"details\": {"
 + "         \"name\": \"eryje\","
 + "         \"age\": 3027,"
 + "         \"sex\": \"M\","
 + "         \"Address\": {"
 + "             \"Office\": \"office\","
 + "             \"Home\": \"Home\""
 + "         }"
 + "     },"
 + "     \"abcDetails\": \"fhkdl\","
 + "     \"mobile\": 389928"
 + " }"
 + "]";

    public static void main(String[] args) throws Exception {

        JSONArray jsonarray = new JSONArray(json);
        System.out.println(String.format("JSONArray length => %d", jsonarray.length()));

        for (int i = 0; i < jsonarray.length(); i++) {
            JSONObject obj1 = jsonarray.getJSONObject(i);
            JSONObject details = obj1.getJSONObject("details");
            System.out.println(String.format("details => %s", details.toString()));

            String name = details.getString("name");
            int age = details.getInt("age");
            System.out.println(name);
            System.out.println(age);
        }
    }
}

结果:

$ mvn exec:java -Dexec.mainClass="testing.App"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building testing 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ testing >>>
[INFO]
[INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ testing <<<
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ testing ---
JSONArray length => 2
details => {"sex":"M","Address":{"Home":"Home","Office":"office"},"age":"30","name":"xyz"}
xyz
30
details => {"sex":"M","Address":{"Home":"Home","Office":"office"},"age":3027,"name":"eryje"}
eryje
3027
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.576s
[INFO] Finished at: Fri Jul 17 10:46:29 JST 2015
[INFO] Final Memory: 7M/106M
[INFO] ------------------------------------------------------------------------

属性名称和年龄在详细信息中尝试此代码

JSONArray jsonarray = new JSONArray(str);
        for (int i = 0; i < jsonarray.length(); i++) {
            JSONObject obj1 = jsonarray.getJSONObject(i);
            JSONObject details = obj1.getJSONObject("details");
            String name = details.getString("name");
            String age = details.getString("age");

            System.out.println(name);
            System.out.println(age);
        }

在您的代码中,您正在做

String name = obj1.getString("name");

但是namedetail的子元素,因此您需要首先获取detail对象。

JSONObject detail = obj1.getJSONObject("details");

接着

String name = detail.getString("name");
//import java.util.ArrayList;
//import org.bson.Document;

Document root= Document.parse("{\"records\":[\n" +
"    {\n" +
"        \"id\": 1,\n" +
"        \"empid\": \"12345\",\n" +
"        \"details\": {\n" +
"            \"name\": \"xyz\",\n" +
"            \"age\": \"30\",\n" +
"            \"sex\": \"M\",\n" +
"            \"Address\": {\n" +
"                \"Office\": \"office\",\n" +
"                \"Home\": \"Home\"\n" +
"            }\n" +
"        },\n" +
"        \"abcDetails\": \"asdf\",\n" +
"        \"mobile\": 123455\n" +
"    },\n" +
"    {\n" +
"        \"id\": 2,\n" +
"        \"empid\": \"64848\",\n" +
"        \"details\": {\n" +
"            \"name\": \"eryje\",\n" +
"            \"age\": 3027,\n" +
"            \"sex\": \"M\",\n" +
"            \"Address\": {\n" +
"                \"Office\": \"office\",\n" +
"                \"Home\": \"Home\"\n" +
"            }\n" +
"        },\n" +
"        \"abcDetails\": \"fhkdl\",\n" +
"        \"mobile\": 389928\n" +
"    }\n" +
"]}");


System.out.println((((Document)((ArrayList)root.get("records")).get(0)).get("id")));
System.out.println(((String)((Document)((ArrayList)root.get("records")).get(0)).get("empid")));
System.out.println(((String)((Document)((Document)((ArrayList)root.get("records")).get(0)).get("details")).get("name")));
System.out.println(((String)((Document)((Document)((ArrayList)root.get("records")).get(0)).get("details")).get("age")));
System.out.println(((String)((Document)((Document)((ArrayList)root.get("records")).get(0)).get("details")).get("sex")));
System.out.println(((String)((Document)((Document)((Document)((ArrayList)root.get("records")).get(0)).get("details")).get("Address")).get("Office")));
System.out.println(((String)((Document)((Document)((Document)((ArrayList)root.get("records")).get(0)).get("details")).get("Address")).get("Home")));
System.out.println(((String)((Document)((ArrayList)root.get("records")).get(0)).get("abcDetails")));
System.out.println((((Document)((ArrayList)root.get("records")).get(0)).get("mobile")));
System.out.println((((Document)((ArrayList)root.get("records")).get(1)).get("id")));
System.out.println(((String)((Document)((ArrayList)root.get("records")).get(1)).get("empid")));
System.out.println(((String)((Document)((Document)((ArrayList)root.get("records")).get(1)).get("details")).get("name")));
System.out.println((((Document)((Document)((ArrayList)root.get("records")).get(1)).get("details")).get("age")));
System.out.println(((String)((Document)((Document)((ArrayList)root.get("records")).get(1)).get("details")).get("sex")));
System.out.println(((String)((Document)((Document)((Document)((ArrayList)root.get("records")).get(1)).get("details")).get("Address")).get("Office")));
System.out.println(((String)((Document)((Document)((Document)((ArrayList)root.get("records")).get(1)).get("details")).get("Address")).get("Home")));
System.out.println(((String)((Document)((ArrayList)root.get("records")).get(1)).get("abcDetails")));
System.out.println((((Document)((ArrayList)root.get("records")).get(1)).get("mobile")));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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