用Java解析嵌套的JSONArrays

时间:2018-08-14 10:03:08

标签: java json jsonparser

我有这个丑陋的JSON字符串,我需要获取totalStars,在这种情况下为500。我尝试了很多解决方案,但似乎都没有用。

这是JSON

{
  "code": 200,
  "message": "success",
  "data": [
    [
      {
        "totalPosts": 42
      }
    ],
    [
      {
        "totalStars": 500
      }
    ],
    [
      {
        "followingCount": 1
      }
    ],
    [
      {
        "followerCount": 1
      }
    ]
  ]
}

此刻,我正在尝试通过以下方式获取数据:

JSONObject jsonResult = new JSONObject(result);
JSONArray data = jsonResult.getJSONArray("data");
if(data != null) {
    String[] names = new String[data.length()];
    for(int i = 0 ; i < data.length() ; i++) {
        names[i] = data.getString(i);

    }
    System.out.println(names);
}

JSONArray数据包含正确的数据,但是我似乎无法从中获取其他数据。

2 个答案:

答案 0 :(得分:2)

看起来您的数据是对象数组的数组,而不是字符串。您需要执行以下操作:

JSONObject jsonResult = new JSONObject(result);
JSONArray data = jsonResult.getJSONArray("data");
if(data != null) {
    String[] names = new String[data.length()];
    for(int i = 0 ; i < data.length() ; i++) {
        JSONArray arr = data.getJSONArray(i);
        dataObj = arr.getJSONObject(0)
        Iterator<String> keys = dataObj.keys();
        names[i] = dataObj.getString(keys.next())
    }
    System.out.println(names);
}

我可能在这个答案中有一些语法问题,但是主要的想法是,当您处理对象数组时,您试图获取一个字符串(每个数据索引都是一个对象数组。这样每个数组中只有一个对象)

答案 1 :(得分:0)

public class DataObject
{
  private int code;

  public int getCode() { return this.code; }

  public void setCode(int code) { this.code = code; }

  private String message;

  public String getMessage() { return this.message; }

  public void setMessage(String message) { this.message = message; }

  private ArrayList<ArrayList<>> data;

  public ArrayList<ArrayList<>> getData() { return this.data; }

  public void setData(ArrayList<ArrayList<>> data) { this.data = data; }
}

使用与您的json对应的java对象从rest api进行解析。 使用gson或jackson库。