我正在尝试转换我返回数组的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数据的普通数组呢?
答案 0 :(得分:1)
JSONObject
与JSONArray
不同。如果您尝试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));
}