正在解析 JSON 个数组值

Parsing JSON array values

我在尝试解析 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(); }
}

并且在日志 cat 中我得到 org.json.JSONException:此输出没有 ssd 值

ssd 是一个对象。 可以得到数组如下:

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

你有错字。不是 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 表示。

您好,您必须 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();}
}