使用 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 库。
我有这个丑陋的 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 库。