【问题标题】:Retrofit 2.0: how to generate pojo class for dynamic objectsRetrofit 2.0:如何为动态对象生成 pojo 类
【发布时间】:2017-12-21 11:44:44
【问题描述】:

我如何为上述类型的响应生成 pojo 类。

我已经尝试过http://www.jsonschema2pojo.org/ 和 RoboPOJOGenerator

如果你想尝试的话,我的 JSON 字符串会很糟糕。

{
"availableDates": {
    "2017-12-31": {
        "from": "08:00",
        "to": "17:00"
    },
    "2017-12-21": {
        "except": [
            {
                "from": "14:00:00",
                "to": "14:10:00"
            },
            {
                "from": "14:11:00",
                "to": "14:21:00"
            }
        ]
    }
}

}

【问题讨论】:

  • 我理解你的问题。您有来自服务器的动态响应,您的密钥可能会更改。所以在改造中你必须从以前静态地提供 Pojo 类。所以你被困在这一点上。为您输入答案
  • 以文本格式发布您的 JSON
  • 从后端更改您的 json 响应,确保您将收到 jsonArray 而不是页面的 jsonOobject
  • 查看我的更新答案。

标签: java android gson retrofit2 android-studio-3.0


【解决方案1】:

1) 转至http://www.jsonschema2pojo.org/

2) 将您的回复粘贴到那里并输入包名和类名

3) 选择目标语言为Java

4) 源类型为 Json

5) 注解风格为 Gson

6) 点击预览

7) 将这些类复制并粘贴到您的应用程序包中

【讨论】:

  • 我已经尝试过没有为我的 JSON 字符串生成正确的 POJO
  • 哥们,自从我开始开发以来,我会使用它,一定有什么问题
  • @VISH 从后端更改您的 json 响应,确保您将收到 jsonArray 而不是 jsonOobject 页面
  • @M.SaadLakhan 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
  • 另一位朋友编辑了答案,请按照给定的步骤来实现您想要的。
【解决方案2】:

你不能动态地做到这一点。虽然你可以使用 HashMap 解析这样的 JSON。

如果您有兴趣这样做,请使用以下页面部分语法

private HasMap<String, Page> pages;

它将页面的 JSON 解析到上面的 HashMap 中。您将有“1”、“2”等作为键和页面作为值。


根据您当前的 JSON,解决方案是

public class AvalDate {
  private HashMap<String, AvailableTimeSlot> availableDates;
}

public class AvailableTimeSlot {
  private String from;
  private String to;
  private ArrayList<ExceptTimeSlots> except;
}

public class ExceptTimeSlots {
  private String from;
  private String to;
}

现在您可以将解析后的值读取为

HashMap<String, AvailableTimeSlot> slots = avalDate.geAavailableDates();
Set keys = slots.keySet();
for (String date : keys) {
  // Here date is 2017-12-31
  AvailableTimeSlot avt = slots.get(date);

  // You can check if except available or not
  if (avt.getExcept() != null) {
    // Read array list of except for that day
    ArrayList<ExceptTimeSlots> except = avt.getExceps();
    // Do whatever you want to do with array
  } else {
    // you can read from and to directlly
    avt.getFrom();
    avt.getTo();
  }
}

【讨论】:

  • 像往常一样是的......它会工作......在此之前将getter setter添加到所有3个pojo中。我没有添加到代码中。
【解决方案3】:

各位急于投反对票的新手,我明白这只是一个澄清,但我不能发表评论,所以我在这里祝福你们投反对票。

OP,在this site中选择这些选项: 1) 目标语言Java,
2) 源类型JSON,
3) 注解风格Gson

然后尝试生成 POJO 类。

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多