【发布时间】:2023-04-04 13:15:01
【问题描述】:
我需要使用 Gson 将传入的 json 消息解析为 Java 对象。 “MessageBody”类应该用于提供 Gson.fromJson(json, MessageBody.class);
json 消息如下所示。
第一层有三个静态字段。第三个字段(“fields”)是“DataField”对象的列表。
DataField 对象具有类型和值字段。
它的价值可能是异质的。预期类型为:“String”、“int”、“boolean”和“HashMap
{
"eventId": "abc",
"customerId": "abc",
"fields": {
"eventDateTime": {
"type": "datetime",
"value": "2019-05-03T10:15:30Z"
},
"eventCorrelationID": {
"type": "string",
"value": "abc"
},
"additionalAttributes": {
"type": "collection",
"value": {
"additionalAttribute1": {
"value": "abc",
"type": "string"
},
"additionalAttribute2": {
"value": "abc",
"type": "string"
}
}
}
}
}
public class MessageBody {
private String eventId;
private String customerId;
private HashMap<String, DataField> fields;
public String getEventId() {
return eventId;
}
public void setEventId(String eventId) {
this.eventId = eventId;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public HashMap<String, DataField> getFields() {
return fields;
}
public void setFields(HashMap<String, DataField> fields) {
this.fields = fields;
}
public class DataField {
private Object value;
private String type;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
}
使用上述类的解析适用于除“additionalAttributes”下的嵌套 DataField 列表之外的所有对象。
它们产生一个 LinkedHashTreeMap 对象。不幸的是,无法将其转换为另一个 DataField 的 HashMap。
如何处理异构对象中的嵌套/递归列表?
如何使以下语句起作用? :-)
HashMap<String, DataField> addAttrs = (HashMap<String, DataField>) messageBody.getFields().get("additionalAttributes").getValue();
【问题讨论】:
-
你的问题解决了吗?