[英]JSON Object GSON into list
当我将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;
}
如果我正确理解问题,我想您在解析未使用键指定名称的数组时遇到麻烦。 因此,当您像这样创建finalJson时,一种简单但不是很好的方法是:
String finalJson = buffer.toString();
只需添加一行以检查它是否包含数组的开头括号,如下所示:
if(finalJson.contains("[")){
finalJson = finalJson.replace("[","{
"arrayname": [");
}
另外,适当关闭阵列。
if(finalJson.contains("]")){
finalJson = finalJson.replace("]","]
}");
}
这样,您将拥有要解析的数组的名称,我想这就是您想要的。 但是,如果您的Json中有多个数组,则此方法可能会失败,在这种情况下,您将必须使用startsWith&EndsWith字符串方法为数组命名。 但是,到目前为止,从您的Json的外观来看,这是可行的。
而不是这样做:
JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = new JSONArray("arrayname");
只要这样做:
JSONArray parentArray = new JSONArray(finalJson);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.