致力于为处理物理建筑物的应用程序构建模型。
理想情况下,我们想要这样的东西:
城市有多个办公室,有多个房间,有属性。
我们使用 jackson 来解析从 API 数据源接收到的 JSON 有效负载,它最终看起来与我看到的示例有点不同。
我们得到的格式是:
{
"CityName1":
{ "OfficeName1":
[
{"name": RoomName1, "RoomProperty2": RoomValue1},
{"name": RoomName2, "RoomProperty2": RoomValue2}
]
},
{ "OfficeName2": [{...}]},
{ "OfficeNameX" : [{...}] },
"CityName2": {...},
"CityNameN": {...}}
Java 类:
public class City {
private Map<String, Object> additionalProperties = new HashMap<String, Object();
private List<Office> _offices = new ArrayList<Office>();
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value)
throws IOException {
_cityName = name;
String officeJson = _mapper.writeValueAsString(value);
StringBuilder sb = new StringBuilder(officeJson);
_offices.add(_mapper.readValue(officeJson, Office.class));
this.additionalProperties.put(name, value);
}
}
public class Office {
private String _officeName;
private static final ObjectMapper _mapper = new ObjectMapper();
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private List<Room> _rooms = new ArrayList<Room>();
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value)
throws IOException {
_officeName = name;
String roomJson = _mapper.writeValueAsString(value);
Room[] rooms = _mapper.readValue(roomJson, Room[].class);
_rooms.addAll(Arrays.asList(rooms));
this.additionalProperties.put(name, value);
}
public List<Room> getRooms() {
return _rooms;
}
public void setRooms(List<Room> rooms) {
_rooms = rooms;
}
}
public class Room {
private static final String NAME = "name";
private static final String PROP_2 = "RoomProperty2";
@JsonProperty(PROP_2)
private String _propertyTwo;
@JsonProperty(NAME)
private String name;
@JsonProperty(PROP_2)
public String getPropertyTwo() {
return _propertyTwo;
}
@JsonProperty(PROP_2)
public void setPropertyTwo(String propTwo) {
_propertyTwo = propTwo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
那么我将如何用 jackson 解析这个?目前,我正在使用@JsonAnySetter 来获取名称,并将其保存为城市或办公室名称,然后将发送到 JsonAnySetter 的值发送到适当的嵌套类。真正的问题在于获取城市办公室的列表。当使用 mapper.readvalues(String, Office.class) 时,我得到一个迭代器,它只包含每个城市的最后一个办公室。有什么想法吗?
对不起,如果这看起来令人困惑!很乐意回答我创建的任何问题。
谢谢您的帮助!