[英]jackson serialize map to a list of customized output
我有一个Map<EquipmentType, Integer> equipment
来存储设备数量。 我想将此地图序列化为
{"equipment":
[
{"equipmentType":{},"quantity": 0},
...
]
}
我有一个定制的序列化器
public void serialize(Map<EquipmentType, Integer> value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
value.entrySet().forEach(entry -> {
try {
gen.writeObjectField("equipmentType", entry.getKey());
gen.writeNumberField("quantity", entry.getValue());
} catch (IOException e) {
e.printStackTrace();
}
});
gen.writeEndObject();
}
但是它只写一个入口集。
"equipment" :
{
"equipmentType" : {},
"quantity" : 1
}
如何将条目集连接到列表?
您目前正在为整个Map<EquipmentType, Integer>
编写一个对象。 对于重复的JSON对象字段,Jackson的行为将被覆盖,因此只有Map
的最后一个条目将被写入为您正在写入的单个JSON对象。
您将要启动一个JSON数组,将每个条目写为一个对象,然后关闭该数组。
例如,
public void serialize(Map<EquipmentType, Integer> value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
gen.writeStartArray();
value.entrySet().forEach(entry -> {
try {
gen.writeStartObject();
gen.writeObjectField("equipmentType", entry.getKey());
gen.writeNumberField("quantity", entry.getValue());
gen.writeEndObject();
} catch (IOException e) {
e.printStackTrace();
}
});
gen.writeEndArray();
}
但是,您也应该摆脱forEach
。 使用常规for
语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.