JSON解析,字符串转换为对象,(“无法将JSON对象转换为JSON数组”)

时间:2020-01-14 15:35:15

标签: java android json

我有一个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),但是我不确定是否有更好的方法。

2 个答案:

答案 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中找到相同的库。

1-Getting 'Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken' when retrieving items from JSON

2-{{​​3}}

相关问题