Java jackson将映射序列化为自定义输出列表
我有一个Java jackson将映射序列化为自定义输出列表,java,serialization,jackson,Java,Serialization,Jackson,我有一个映射设备来存储设备数量。 我想将此地图序列化为 {"equipment": [ {"equipmentType":{},"quantity": 0}, ... ] } 我有一个定制的序列化程序 public void serialize(Map<EquipmentType, Integer> value, JsonGenerator gen, SerializerProvider provider) throws IOException {
映射设备
来存储设备数量。
我想将此地图序列化为
{"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();
}
如何将入口集连接到列表?您当前正在为整个
映射编写单个对象。Jackson对重复JSON对象字段的行为是覆盖,因此只有映射中的最后一个条目将作为您正在编写的单个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();
}
public void serialize(映射值、JsonGenerator gen、SerializerProvider提供程序)
抛出IOException{
WriteStartaray将军();
value.entrySet().forEach(条目->{
试一试{
gen.writeStartObject();
gen.writeObject字段(“设备类型”,entry.getKey());
gen.writeNumberField(“数量”,entry.getValue());
writeEndObject将军();
}捕获(IOE异常){
e、 printStackTrace();
}
});
writeEndArray将军();
}
但是,您也应该摆脱forEach的forEach
。对
语句使用正常的。它是否多次执行lambda?
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();
}