首页 > 解决方案 > 用 Java 解析嵌套的 JSONArrays

问题描述

我有这个丑陋的 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数据,但我似乎无法从中获取其他数据。

标签: javajsonjsonparser

解决方案


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

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

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


推荐阅读