【问题标题】:Format of POJO for nested JSON?嵌套 JSON 的 POJO 格式?
【发布时间】:2014-04-08 13:49:17
【问题描述】:

假设 JSON 响应是:

[{ "data" : { "item1": value1, "item2:" value2 }}]

当您必须首先访问数据时,如何获取值“value1”和“value2”?

如果字段位于根目录,那么我可以让该方法返回带有这些字段名称的 POJO。


我基本上希望下面的工作。

@GET("/path/to/data/")
Pojo getData();

class Pojo
{
public String item1;
public String item2;
}

【问题讨论】:

    标签: java gson retrofit


    【解决方案1】:

    您可以尝试以下代码,使用 Gson 库将您的 json 字符串转换为带有必填字段的 Pojo 对象。

    Gson gson = new Gson();
    
    JsonArray jsonArray = gson.fromJson (jsonString, JsonElement.class).getAsJsonArray(); // Convert the Json string to JsonArray
    
    JsonObject jsonObj = jsonArray.get(0).getAsJsonObject(); //Get the first element of array and convert it to Json object
    
    Pojo pojo = gson.fromJson(jsonObj.get("data").toString(), Pojo.class); //Get the data property from json object and convert it to Pojo object
    

    或者你可以定义你的嵌套 Pojo 类来解析它。

    class Pojo
    {
        private String item1;
        private String item2;
    
        //Setters and Getters
    }
    
    class Data
    {
        private Pojo data;
    
        //Setters and Getters
    }
    
    ArrayList<Data> yourArray = new Gson().fromJson(jsonString, new TypeToken<List<Data>>(){}.getType());
    

    编辑:尝试下面的代码使用 Retrofit 获取 value1 和 value2。

    class Pojo
    {
        private String item1;
        private String item2;
    
        //Setters and Getters
    }
    
    class Data
    {
        private Pojo data;
    
        //Setters and Getters
    }
    
    class MyData
    {
        private ArrayList<Data> dataList;
    
        //Setters and Getters
    }
    
    IService service = restAdapter.create(IService.class);
    MyData data = service.getData(); 
    
    ArrayList<Data> list = data.getDataList(); // Retrive arraylist from MyData
    
    Data obj = list.get(0); // Get first element from arraylist
    
    Pojo pojo = obj.getData(); // Get pojo from Data 
    
    Log.e("pojo", pojo.item1 + ", " + pojo.item2);
    

    【讨论】:

    • 使用Retrofit时如何获取json字符串?
    • @RodL。根据 Retrofit documentation,Retrofit 默认使用 Gson 将 HTTP 正文与 JSON 进行转换。如果您想指定与 Gson 的默认值不同的行为(例如命名策略、日期格式、自定义类型),请在构建 RestAdapter 时提供具有所需行为的新 Gson 实例。
    • @RodL。我不熟悉改造
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2014-04-08
    • 2016-05-16
    相关资源
    最近更新 更多