【问题标题】:Nested Json parsing with GSon使用 GSon 解析嵌套的 Json
【发布时间】:2013-03-28 21:17:57
【问题描述】:

如何用google Gson解析下面的Json响应?

{
   "rootobject":[
      {
         "id":"7",
         "name":"PP-1",
         "subtitle":"name-I",
         "key1":"punjab",
         "key12":"2013",
         "location":"",
         "key13":"0",
         "key14":"0",
         "key15":"0",
         "result_status":null
      },
      {
         "id":"7",
         "name":"PP-1",
         "subtitle":"name-I",
         "key1":"punjab",
         "key12":"2013",
         "location":"",
         "key13":"0",
         "key14":"0",
         "key15":"0",
         "result_status":null
      },
      {
         "id":"7",
         "name":"PP-1",
         "subtitle":"name-I",
         "key1":"punjab",
         "key12":"2013",
         "location":"",
         "key13":"0",
         "key14":"0",
         "key15":"0",
         "result_status":null
      },
      {
         "id":"7",
         "name":"PP-1",
         "subtitle":"name-I",
         "key1":"punjab",
         "key12":"2013",
         "location":"",
         "key13":"0",
         "key14":"0",
         "key15":"0",
         "result_status":null
      }
   ]
}

【问题讨论】:

    标签: android json list parsing gson


    【解决方案1】:

    我会创建对象来“包装”响应,例如:

    public class Response {
    
      @SerializedName("root_object")
      private List<YourObject> rootObject;
    
      //getter and setter
    }
    
    
    public class YourObject {
    
      @SerializedName("id")
      private String id;
      @SerializedName("name")
      private String name;
      @SerializedName("subtitle")
      private String subtitle;
      //... other fields
    
      //getters and setters
    }
    

    注意:使用@SerializedName 注解遵循 Java 属性中的命名约定,同时匹配 JSON 数据中的名称。

    然后您只需使用 Reponse 对象解析 JSON,如下所示:

    String jsonString = "your json data...";
    Gson gson = new Gson();
    Response response = gson.fromJson(jsonString, Response.class);
    

    现在您可以使用 getter 和 setter 访问 Response 对象中的所有数据。

    注意:您的 Response 对象可用于解析不同的 JSON 响应。例如,您的 JSON 响应可能不包含 idsubtitle 字段,但您的 Reponseobject 也会解析响应,只需在此字段中添加 null。这样您就可以只使用一个Responseclass 来解析所有可能的响应...

    编辑:我没有意识到Android标签,我在一个普通的Java程序中使用这种方法,我不确定它是否对Android有效......

    【讨论】:

    • 但是我正在获取对象列表..?我该如何注释它..? RootObject 进一步包含对象列表。
    【解决方案2】:

    你可以试试这个希望这会奏效

     // Getting Array 
    JSONArray contacts = json.getJSONArray("rootobject");
    SampleClass[] sample=new SampleClass[contacts.length]();
    
        // looping through All 
        for(int i = 0; i < contacts.length(); i++){
            JSONObject c = contacts.getJSONObject(i);
    
            // Storing each json item in variable
            sample[i].id = c.getString("id");
            sample[i].name = c.getString("name");
            sample[i].email = c.getString("subtitle");
            sample[i].address = c.getString("key1");
            sample[i].gender = c.getString("key12");
            sample[i].gender = c.getString("location");
            sample[i].gender = c.getString("key13");
            sample[i].gender = c.getString("key14");
            sample[i].gender = c.getString("key15");
            sample[i].gender = c.getString("result_status");
           }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多