我有以下JSON:
[
{
2: {
"c": true
}
},
{
3: {
"p": 10
}
}
]
我想转换为CBOR格式。
根据cbor.me我有以下输出:
但是,当使用Jackson Binary CBOR串行器时,我有以下输出:
这没错,但没有进行优化...我额外增加了4个不必要的字节,这实际上是可以的。
然后,我尝试手动序列化JSON,但结果相同:
@Override
public void serialize(Request value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartArray(value.getDataList().size());
for (Data data : value.getDataList()) {
jgen.writeStartObject(new Map[1]);
jgen.writeFieldId(data.getItem());
jgen.writeStartObject();
if (data.getObject().getC() != null) {
jgen.writeBooleanField("c", data.getObject().getC());
}
if (data.getObject().getP() != null) {
jgen.writeNumberField("p", data.getObject().getP());
}
jgen.writeEndObject();
jgen.writeEndObject();
}
jgen.writeEndArray();
}
这是Jackson Binary格式库的错误,还是我缺少ObjectMapper的某些配置属性?
编辑:这似乎是一个已知问题:https://github.com/FasterXML/jackson-dataformats-binary/issues/3
最佳答案
通过使用2.9.4
版本,可以在CBORGenerator
类中使用以下方法:public final void writeStartObject(int elementsToWrite)
@Override
public void serialize(Request value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartArray(value.getDataList().size());
for (Data data : value.getDataList()) {
((CBORGenerator) jgen).writeStartObject(1);
jgen.writeFieldId(data.getItem());
((CBORGenerator) jgen).writeStartObject(1);
if (data.getObject().getC() != null) {
jgen.writeBooleanField("c", data.getObject().getC());
}
if (data.getObject().getP() != null) {
jgen.writeNumberField("p", data.getObject().getP());
}
jgen.writeEndObject();
jgen.writeEndObject();
}
jgen.writeEndArray();
}
我有以下输出: