当我将JSON数组填充到listview中时,我想实现我的旧代码但是我当前的json没有指定数组,整体json是一个数组......
有人可以告诉我如何将我的代码转换为像这样使用JSON吗?
https://api-v2.hearthis.at/categories/drumandbass/?page=15&count=2
使用gson的代码,我的旧:
protected List<Model> doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line ="";
while ((line = reader.readLine()) != null){
buffer.append(line);
}
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = new JSONArray("arrayname");
List<Model> dataModelList = new ArrayList<>();
Gson gson = new Gson();
for(int i=0; i<parentArray.length(); i++) {
JSONObject finalObject = parentArray.getJSONObject(i);
Model modelList = gson.fromJson(finalObject.toString(), Model.class);
dataModelList.add(modelList);
}
return dataModelList;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if(connection != null) {
connection.disconnect();
}
try {
if(reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
答案 0 :(得分:1)
如果我正确理解了这个问题,我猜你在解析数组时遇到了问题,而该数组的名称没有用密钥指定。所以,当你像这样创建你的finalJson时,一个简单但不是很好的方法就是:
String finalJson = buffer.toString();
只需添加一行来检查它是否包含数组左括号,如下所示:
if(finalJson.contains("[")){
finalJson = finalJson.replace("[","{
"arrayname": [");
}
同样,适当地关闭数组。
if(finalJson.contains("]")){
finalJson = finalJson.replace("]","]
}");
}
这样,你将有一个要解析的数组的名称,我想这就是你要找的东西。但是如果你的Json中有多个数组,这种方法可能会失败,在这种情况下你将不得不使用startsWith&amp; endsWith字符串方法为数组命名。但是,截至目前,从你的Json看起来,这将起作用。
答案 1 :(得分:1)
而不是这样做:
JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = new JSONArray("arrayname");
这样做:
JSONArray parentArray = new JSONArray(finalJson);