我有一个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);
}
但我不断收到以下错误:
类型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,open,close,high,low),但是我不确定是否有更好的方法。
答案 0 :(得分:1)
尽管我缺少一些数据,但我可以假设出了什么问题:
您的JSON是:
{
"data" : [
{
"id": "0",
"Open": "1",
"Close": "1",
"High": "1",
"Low": "1"
}
]
}
因此您的JSON包含一个 Object ,该对象包含一个 Array 对象。
您正在尝试从根元素(即对象)创建JSONArray。
JSONArray JSONARR = new JSONArray(holder);
您可以解决将代码从根导航更改为data
属性的问题,如下所示:
JSONObject jsonObj = new JSONObject(holder);
JSONArray JSONARR = jsonObj.getJSONArray("data");
答案 1 :(得分:0)
您可能会看到这些链接,它们对我也有很大帮助,但是它在C#中,因此您也可以在Java中找到相同的库。
2-{{3}}