JSON对象GSON进入列表

时间:2016-07-04 09:48:25

标签: java android json gson

当我将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;
 }

2 个答案:

答案 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);