简体   繁体   English

用 Java 解析 JSON 多维数组

[英]Parse JSON multidimensional array with Java

I'm new to Java coding and I want to parse json response, it looks like this:我是 Java 编码的新手,我想解析 json 响应,它看起来像这样:

{
    "13.12.2021  Monday": {
        "lessons": [
            {
            "type": "second",
            "lesson":{
                "subject": "ОР и АБД",
                "teacher": "Кузьмина В.М.",
                "room": null
                }
            },
            {
                "type": "common",
                "0": {
                    "subject": "ПМ.2.Р5. РС и ПИР со С и ДК",
                    "teacher": "Голубева Я.С.",
                    "room": "211"
                }
            }
        ],
        "dinner": "11.00 "
        },
    "14.12.2021  Tuesday": {
        "lessons":[
            {
                "type": "common",
                "0":{
                    "subject": "ПМ.2.Р1. ТРОПО",
                    "teacher": "Ахметова Ф.Т.","room":"212"
                }
            },
            {
                "type": "common",
                "0":{
                    "subject": "ПМ.2.Р1. ТРОПО",
                    "teacher": "Ахметова Ф.Т.",
                    "room": "212"
                }
            }
        ],
        "dinner": "11:00 "
    }
}

I use this code我使用此代码

JSONObject json = new JSONObject(result);
Iterator<String> days = json.keys();

String response = "";

while(days.hasNext()) {
    String key = days.next();
    JSONObject day = json.getJSONObject(key);
    JSONArray lessons = day.getJSONArray("lessons");

    int lessonsCount = lessons.length(), i;
    for (i = 0; i < lessonsCount; i = i + 1) {
        JSONObject lesson = lessons.getJSONObject(i);
        response += lesson.getString("type") + '\n';
    }


    response += '\n';
}

But get this error:但是得到这个错误:

org.json.JSONException: Value [] at 4 of type org.json.JSONArray cannot be converted to JSONObject org.json.JSONException: Value [] at 4 of type org.json.JSONArray 无法转换为 JSONObject

Please, explain me how can I access all the child elements such as "lesson" block and it's "subject", "teacher", "room".请解释我如何访问所有子元素,例如“课程”块,它是“主题”、“老师”、“房间”。 I've checked similar questions but none helped me我检查过类似的问题,但没有一个对我有帮助

For example:例如:

  StringBuilder response = new StringBuilder();
        while (days.hasNext()) {
            String key = days.next();
            JSONObject day = json.getJSONObject(key);
            JSONArray lessons = day.getJSONArray("lessons");
            for (int i = 0; i < lessons.length(); i++) {
                JSONObject lesson = lessons.getJSONObject(i);
                Iterator<String> item = lesson.keys();
                while (item.hasNext()) {
                    String jKey = item.next();
                    JSONObject jsonObject = lesson.optJSONObject(jKey);
                    if (jsonObject != null) {
                        parse(response, jsonObject);
                    } else {
                        if (lesson.get(jKey) != null) {
                            response.append(lesson.getString(jKey)).append("\n");
                        }
                    }
                }
            }
            response.append('\n');
        }


private void parse(StringBuilder response, JSONObject jsonObject) {
        if (jsonObject != null) {
            Iterator<String> item = jsonObject.keys();
            while (item.hasNext()) {
                String jKey = item.next();
                JSONObject jObject = jsonObject.optJSONObject(jKey);
                if (jObject != null) {
                    parse(response, jsonObject);
                } else {
                    response.append(jsonObject.get(jKey)).append("\n");
                }
            }
        }
    }

I updated your provided function to have your required fields我更新了您提供的 function 以获得您的必填字段

     while(days.hasNext()) {
        String key = days.next();
        JSONObject day = json.getJSONObject(key);
        JSONArray lessons = day.getJSONArray("lessons");

        int lessonsCount = lessons.length(), i;
        for (i = 0; i < lessonsCount; i = i + 1) {
            JSONObject lesson = lessons.getJSONObject(i);
            Iterator<String> lessonKeys = lesson.keys();
            while(lessonKeys.hasNext()) {
                String lessonKey = lessonKeys.next();
                if(!lessonKey.equals("type")) {
                    JSONObject lessonData = lesson.getJSONObject(lessonKey);
                    response += lessonData.getString("subject")+" - "+lessonData.getString("teacher")+" - "+lessonData.get("room")+'\n';
                }
            }
        }
    }

The output as follow: output如下:

ПМ.2.Р1. ТРОПО - Ахметова Ф.Т. - 212
ПМ.2.Р1. ТРОПО - Ахметова Ф.Т. - 212
ОР и АБД - Кузьмина В.М. - null
ПМ.2.Р5. РС и ПИР со С и ДК - Голубева Я.С. - 211

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

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