Разбор JSON нескольких объектов - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь проанализировать приведенный ниже json, но не могу этого сделать, так как возникает ошибка переполнения стека.

Вот код JSON -

[{
    "Class": "1",
    "school": "test",
    "description": "test",
    "student": [
        "Student1",
        "Student2"
    ],
    "qualify": true,
    "annualFee": 3.00
}]

Вот код, которыйв настоящий момент происходит сбой.

String res  = cspResponse.prettyPrint();
org.json.JSONObject obj = new org.json.JSONObject(res);
org.json.JSONArray arr = obj.getJSONArray(arrayName);
String dataStatus=null;

for (int i = 0; i < arr.length(); i++) {
    dataStatus = arr.getJSONObject(i).getString(key);
    System.out.println("dataStatus is \t" + dataStatus);
}

Варианты использования:

  1. Чтобы получить значение ключа "class"
  2. Получить значение от Student
  3. Получитьзначение из школы

Я ценю вашу помощь.

update-1 Код дополнительной информации о трассировке стека обновлен ниже. cls = 1

ошибка- org.json.JSONException: JSONObject["student "] not a string.

трассировка стека-

public String getString(String key) throws JSONException {
        Object object = this.get(key);
        if (object instanceof String) {
            return (String) object;
        }
        throw new JSONException("JSONObject[" + quote(key) + "] not a string.");
    }

Когда я запускаю код с приведенными ниже ответами, здесь его ошибка для ученика нестрока.

Ответы, которые я использовал в первых двух комментариях, и оба имеют одинаковую ошибку. Я присваиваю вашу помощь.

Ответы [ 4 ]

5 голосов
/ 01 октября 2019

Ваш json-фрагмент недействителен - последняя запятая прерывает синтаксический анализ. Но остальная часть кода вполне работоспособна.

    String res = "[\n" +
            "    {\n" +
            "        \"Class\": \"1\",\n" +
            "        \"school\": \"test\",\n" +
            "        \"description\": \"test\",\n" +
            "        \"student\": [\n" +
            "            \"Student1\",\n" +
            "            \"Student2\"\n" +
            "        ],\n" +
            "        \"qualify\": true,\n" +
            "        \"annualFee\": 3.00\n" +
            "       }\n" +
            "]";

    JSONArray arr = new JSONArray(res);
    for (int i = 0; i < arr.length(); i++) {
        JSONObject block = arr.getJSONObject(i);
        Integer cls = block.getInt("Class");
        System.out.println("cls = " + cls);
        Object school = block.getString("school");
        System.out.println("school = " + school);
        JSONArray students = block.getJSONArray("student");
        System.out.println("student[0] = " + students.get(0));
        System.out.println("student[1] = " + students.get(1));
    }

должен вывести

cls = 1
school = test
student[0] = Student1
student[1] = Student2
4 голосов
/ 01 октября 2019

Ваш JSON ответ корень - массив , но вы рассматриваете свой ответ JSON как объект JSON

Изменение вашегопарсинг JSON-кода, как показано ниже

String res=cspResponse.prettyPrint();
    org.json.JSONArray arr = new org.json.JSONArray(res);
    String dataStatus=null;
    for (int i = 0; i < arr.length(); i++) {
        org.json.JSONObject obj=arr.getJSONObject(i);
        dataStatus = obj.getString(key);
        System.out.println("dataStatus is \t" + dataStatus);
        String schoolName = org.getString("school");
        System.out.println("school => " + schoolName);
        org.json.JSONArray students = obj.getJSONArray("student");
        System.out.println("student[0] = " + students.get(0));
        System.out.println("student[1] = " + students.get(1));
    }
2 голосов
/ 01 октября 2019

Ваш ответ JSON неверен. ваш корень - это массив, а не объект json

Используйте класс JSON Array вместо объекта JSON

String res=cspResponse.prettyPrint();
    org.json.JSONArray arr = new org.json.JSONArray(res);

/* rest of your parsing*/
1 голос
/ 01 октября 2019
    You can use simple JSONObject class and Simple JSONParser for parsing the JSON.

     1. Parse the JSON. 

          org.json.simple.JSONParser parser = new org.json.simple.JSONParser();
          org.json.simple.JSONObject parsedJSON = parser.parse(inputJSON);

     2. To get class: 

          String class = parsedJSON.get("Class");

     3. To get Students: 

          org.json.simple.JSONArray studentArray = parsedJSON.get("student");

    4. To Get School: 

         String school = parsedJSON.get("school");

    After the above steps, you can run a for-loop to print the class and students.
...