解析复杂的JSON结果

时间:2017-08-06 12:06:26

标签: java json

我有一个像下面这样的json(结果),我需要Key“extra”的值,即“联系办公室”。 我尝试了以下代码,但它没有用,你能帮忙吗?

JSONArray jsonArray = new JSONArray(result.toString().trim());
JSONObject json = jsonArray.getJSONObject(0).getJSONObject("student").getJSONArray("department").getJSONObject(0).getJSONObject("classes");
String val=json.getString("extra");

// JSON示例

{

"student": [

{
    "department" : [

        {
            "classes" : [

                {

                "grade" : "A",
                "fine"  : "No"
                },
                {

                "grade" : "B",
                "fine"  : "Yes",
                "extra" : "contact office"
                },
                {

                "grade" : "C",
                "fine"  : "NA"
                }
                ],
        }
        ],

}
],

}

3 个答案:

答案 0 :(得分:1)

你混淆了JSONArrayJSONObject几次,不确定我必须改变什么,但以下内容会有效:

JSONObject jsonObject = new JSONObject(result.toString().trim());
JSONArray jsonArray = jsonObject
        .getJSONArray("student").getJSONObject(0).getJSONArray("department").getJSONObject(0)
        .getJSONArray("classes");
String val = jsonArray.getJSONObject(1).getString("extra");

答案 1 :(得分:0)

这是一个完整的样本吗?如果是这样,它不会以数组开头。学生是对象而不是数组。如果它只是数组中一个项目的样本,那么你就可以了。

我注意到的第二件事是:getJSONObject("classes")。类是一个数组而不是一个对象,这不会起作用。

答案 2 :(得分:0)

您是否要考虑使用JsonPath。你可以这样做 -

std::cout << *pa << std::endl;