我有一个如下所示的JSON数据:
{
"status": "status",
"date": "01/10/2019",
"time": "10:30 AM",
"labels": {
"field1": "value1",
"field2": "value2",
...
"field100": "value100"
}
"description": "some description"
}
在我的Java代码中,我有两个类:
Alerts
类,具有以下字段-状态,日期,时间,描述和Labels
类。
内部Labels
类应该容纳从field1
到field100
(以及更多)的所有字段
我正在像这样将JSON解析为GSON:
Alerts myAlert = gson.fromJson(alertJSON, Alert.class);
上面的代码将JSON解析为Alert
对象和Labels
对象。
问题:
如何将Labels对象中的字段(field1
,field2
等)映射为单个String字段,而不是将它们解析为映射?
例如,Labels对象看起来像这样:
public class Labels {
// I want to parse all the fields (field1, field2, etc) into
// this map
Map<String, String> fields = new HashMap<>();
}
我该怎么做?
答案 0 :(得分:2)
您可以使用TypeToken直接指定标签。
git log
答案 1 :(得分:2)
像这样声明Alert对象:
public class Alert {
private String description;
private String status;
private Map<String, String> labels;
...
}
为我工作,并且此代码
Alert myAlert = gson.fromJson(alertJSON, Alert.class);
System.out.println(myAlert.getLabels());
将地图打印为{field1=value1, field2=value2, field100=value100}
因此不需要中间对象
答案 2 :(得分:1)
对于一般情况-一种更灵活的方式:gson可以注册类型适配器:
names(which(rowSums(Reduce(`&`, list(df[-ncol(df)] < -1.7, df[-1] < -1.7))) > 0))
#[1] "1977" "1979" "1980" "1982" "1983" "1985"
针对您的情况的反序列化器是:
Gson gson = new GsonBuilder().registerTypeAdapter(Labels.class, new LabelsDeserializer()).create();
要进行序列化,需要实现JsonSerializer <...>