JSON 解析, 字符串到对象, ( "Can't convert JSON Object to JSON Array" )



我有一个 JSON 字符串,我正在尝试使用以下代码将其解析为数组:

try {
String holder = getJSONString(getApplicationContext());
JSONArray JSONARR= new JSONArray(holder);
List<datatemp> dataList = new ArrayList<>();
for (int i = 0; i < JSONARR.length(); i++) {
JSONObject jsonObj = JSONARR.getJSONObject(i);
datatemp data = new datatemp();
data.ID = Integer.parseInt(jsonObj.getString("id"));
data.Open = Integer.parseInt(jsonObj.getString("Open"));
data.Close = Integer.parseInt(jsonObj.getString("Close"));
data.High = Integer.parseInt(jsonObj.getString("High"));
data.Low = Integer.parseInt(jsonObj.getString("Low"));
dataList.add(data);
}
} catch (JSONException e) {
Log.e("JSON_ERROR", "unexpected JSON exception", e);
}

但我不断收到以下错误:

type org.json.JSONObject 无法转换为 JSONArray

JSON 字符串如下所示:

"data": [
{
"id": "0",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "1",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "2",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "3",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "4",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "5",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "6",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "7",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "8",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "9",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
},
{
"id": "10",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
}
]
}

我正在尝试解析数据,以便以后可以在图表中显示它。我只是想将 JSON 解析为一个列表,以便以后可以将数据拆分为较小的列表(id、打开、关闭、高、低(,但我不确定是否有更好的方法。

虽然我缺少一些数据,但我可以假设出了什么问题:

您的 JSON 是:

{
"data" : [
{  
"id": "0",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
}
]
}

因此,您的 JSON 包含一个包含对象数组的对象。 您正在尝试从根元素(即对象(创建 JSONArray。JSONArray JSONARR = new JSONArray(holder);

您可以解决更改从根目录导航到data属性的代码的问题,如下所示:

JSONObject jsonObj = new JSONObject(holder);
JSONArray JSONARR = jsonObj.getJSONArray("data");

你可以看看这些链接,它们也帮助了我很多,但它是用 C# 的,所以你也可以在 java 中找到相同的库。

1-从 JSON 检索项目时获取"无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken">

2-在 C# 中读取和分析 Json 文件

最新更新