繁体   English   中英

JSON对象GSON进入列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM