Retrofit 2.0:如何为动态对象生成pojo类

时间:2017-12-21 11:44:45

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

enter image description here 我怎样才能为上述类型的响应生成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"
            }
        ]
    }
}

}

3 个答案:

答案 0 :(得分:4)

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

2)在此处粘贴您的回复并输入包裹和类名

3)选择目标语言为Java

4)源类型为Json

5)注释样式为Gson

6)单击预览

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

答案 1 :(得分:3)

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

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

private HasMap<String, Page> pages;

它会将页面的JSON解析为上面的HashMap。您将使用“1”,“2”等作为Key和Page作为其值。

根据您当前的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();
  }
}

答案 2 :(得分:0)

对于那些热心投票的新手 - SO用户,我知道这只是一个澄清,但我不能发表评论,所以在这里,我带着你的下选票祝福。

OP ,在this site中选择以下选项: 1)目标语言 Java
2)源类型 JSON
3)注释样式 Gson

然后尝试生成POJO类。