Разбор значений массива JSON - PullRequest
0 голосов
/ 24 декабря 2018

Я столкнулся с проблемой при попытке анализа массива JSON и перечисления всех его значений, у меня есть следующий формат JSON

{
  "sdd": {
        "token":"1",
        "details":[{
              "type":"SOME_TYPE",
              "l":,
              "expiration_date":"12\/2020",
              "default":true,
              "expired":false,
              "token":"1"
         }]
   }
 } 

Вывод JSON У меня есть

public void onResponse(JSONObject response) {
    try {
        JSONArray ja = response.getJSONArray("ssd");
        for (int i = 0; i < ja.length(); i++) {
            JSONObject jobj = ja.getJSONObject(i);
            Log.e(TAG, "response" + jobj.getString("token"));
            Log.e(TAG, "response" + jobj.getString("details"));
        }
    } catch(Exception e) { e.printStackTrace(); }
}

и вжурнал я получаю org.json.JSONException: нет значения для ssd этот вывод

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

У вас есть опечатка.Не ssd, а sdd.А также sdd - это не массив, а объект.Поэтому вы должны написать так:

JSONObject jb = response.getJSONObject("sdd");

Полный код синтаксического анализа будет выглядеть так:

public void onResponse(JSONObject response) {
    try {
        JSONObject sdd = response.getJSONObject("sdd");
        JSONArray details = sdd.getJSONArray("details");
        for (int i = 0; i < details.length(); i++) {
            JSONObject jobj = details.getJSONObject(i);
            Log.e(TAG, "response-type:" + jobj.getString("type"));
            Log.e(TAG, "response-token:" + jobj.getString("token"));
            Log.e(TAG, "response-expiration_date:" + jobj.getString("expiration_date"));
            Log.e(TAG, "response-default:" + jobj.getBoolean("default"));
            Log.e(TAG, "response-expired:" + jobj.getBoolean("expired"));
        }
    } catch(Exception e) { e.printStackTrace(); }
}

Также позвольте мне предложить вам использовать gson , эта библиотека поможетВы десериализуете свои представления JSON.

0 голосов
/ 24 декабря 2018

привет, вы должны json файл не создать, это создать:

{"sdd": {"token": "1", "details": [{"type": "SOME_TYPE"," expiration_date ":" 12/2020 "," default ": true," expired ": false," token ":" 1 "}]}}

после получения данных изкод:

public void onResponse(JSONObject response) {
    try {
        JSONObject ssd = response.getJSONObject("ssd");
        JSONArray details = ssd.getJSONArray("details");
        for (int i = 0; i < details.length(); i++) {
            JSONObject obj = details.getJSONObject(i);
            Log.e(TAG, "response" + obj.getString("type"));
            Log.e(TAG, "response" + obj.getString("expiration_date"));
            Log.e(TAG, "response" + obj.getBoolean("default"));
            Log.e(TAG, "response" + obj.getBoolean("expired"));
            Log.e(TAG, "response" + obj.getString("details"));

        }
    }catch (Exception e){e.printStackTrace();}
}
0 голосов
/ 24 декабря 2018

ssd - это объект.Вы можете получить массив следующим образом:

JSONObject jo = response.getJSONObject("sdd");
JSONArray ja = jo.getJSONArray("details");
...