【问题标题】:Android JSON ParseAndroid JSON 解析
【发布时间】:2017-04-20 20:12:22
【问题描述】:

我有这个 json 响应:

[{"id":"1","cat":"A","pic":"false","sector":"1"},{"id":"2","cat":"B","pic":"true","sector":"2"}]

我需要在android上解析它。

我正在尝试遵循代码:

JSONObject obj = new JSONObject(response);
JSONArray jsonArray = obj.getJSONArray("");
JSONObject jsonObject = jsonArray.getJSONObject(0);

Log.d("ID -> ", jsonObject.getString("id"));
Log.d("CAT -> ", jsonObject.getString("cat"));

但它不起作用。

如果我的结果是:

{ "data":[{"id":"1","cat":"A","pic":"false","sector":"1"},{"id":"2","cat":"B","pic":"true","sector":"2"}]}

我修改了以下代码:

JSONArray jsonArray = obj.getJSONArray("data");

有效。

我如何解析它考虑了我的第一个 json 响应(没有“数据”)

谢谢。

【问题讨论】:

  • 尝试 JSONArray jsonArray = new JSONArray(response);然后像 for(int i = 0; i
  • new JSONObject(response); 为什么? obj.getJSONArray("");你认为这是做什么的?

标签: android json


【解决方案1】:

你应该使用下一个代码:

JSONArray jsonArray = new JSONArray(response);
JSONObject jsonObject = jsonArray.getJSONObject(0);

Log.d("ID -> ", jsonObject.getString("id"));
Log.d("CAT -> ", jsonObject.getString("cat"));

因为你在json中没有对象,而是数组,所以你应该创建数组而不是对象。这就是您的修改有效的原因。因为在修改后的代码中“数据”是一个对象(JSONObject)

【讨论】:

  • 这是我想说的更好的版本
【解决方案2】:
JSONArray array = new JSONArray(string_of_json_array);
for (int i = 0; i < array.length(); i++) {
    JSONObject row = array.getJSONObject(i);
    id = row.getInt("id");
    pic = row.getString("pic");
}

或者您可以只使用 Gson 库。只需创建你的 pojo 类

public class Data{
     int id;
     String cat;
     String pic;
     String sector;

     //setter and getter
}

那么,

List<Data> datas = gson.fromJson(string_of_json_array, new TypeToken<List<Data>>(){}.getType());
for(Data item: datas){
     String pic = item.getPic();
}

【讨论】:

  • 您好,我尝试了您的代码,但出现错误:“无法从静态上下文引用”。 JSONArray jsonArray = new JSONArray(response); List&lt;Data&gt; datas = Gson.fromJson(response, new TypeToken&lt;List&lt;Data&gt;&gt;(){}.getType()); 错误是参考“响应”
猜你喜欢
  • 1970-01-01
  • 2017-08-13
  • 2014-03-18
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多