使用 Java 解析嵌套的 JSONArray

Parsing nested JSONArrays with Java

我有这个丑陋的 JSON 字符串,我需要获取 totalStars,在本例中为 500。我已经尝试了很多解决方案,但 none 似乎有效。

这是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 数据包含正确的数据,但我似乎无法从中获取其他数据。

看起来你的数据是一个对象数组,而不是字符串。你需要做这样的事情:

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);
}

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

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 对象从其余 api 进行解析。 使用 gson 或 jackson 库。