无法将JSONObject强制转换为JSONArray

时间:2015-02-25 13:54:29

标签: java json

我正在尝试转换我返回数组的JSON数据,以便我可以使用listView中的数据。

我收到了以下代码:

JSONObject jsonobject;
jsonobject = JSONFunctions.getJSONfromURL("example/url");

ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonobject;
if (jsonArray != null) {
   //do something with it
}

注意:我没有任何Java经验。
方法getJSONfromURL返回给定URL的JSON,它的工作正常,但错误在JSONArray jsonArray = (JSONArray)jsonobject;

它给出以下错误:无法将JSONObject强制转换为JSONArray 我也试过这个:JSONArray jsonArray = (JSONObject)(JSONArray)jsonobject;

我无法弄清楚我做错了什么。

那么如何将我的jsonobject转换为可以用作listView数据的普通数组呢?

2 个答案:

答案 0 :(得分:1)

JSONObjectJSONArray不同。如果您尝试new JSONObject("['test', 'array']"),则会获得JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]

尝试这是否适合您:

static JSONArray fromUrl(URL url) throws IOException {
    try (
        InputStream openStream = url.openStream();
        BufferedInputStream bis = new BufferedInputStream(openStream);
        Scanner scanner = new Scanner(bis, StandardCharsets.UTF_8.name());
    ) {
        if (!scanner.useDelimiter("\\A").hasNext()) {
            throw new EOFException("empty response");
        }
        return new JSONArray(scanner.next());
    }
}

答案 1 :(得分:0)

JSONObject就像java中的Map。键值对。 所以,你应该迭代迭代Map:

Iterator iterator = jsonobject.keys();
JSONArray jsonArray = new JSONArray();

while (iterator.hasNext()){
    String key = (String) iterator.next(); // assuming the key to be a String
    // You can put the key also if you want. But, It does not make any sense to do so.
    jsonArray.put(jsonobject.get(key)); 
}