Bib*_*ibu 5 java serialization json jackson cbor
我有以下 JSON:
[
{
2: {
"c": true
}
},
{
3: {
"p": 10
}
}
]
Run Code Online (Sandbox Code Playgroud)
我想转换为 CBOR 格式。根据 cbor.me 我有以下输出:
82A102A16163F5A103A161700A
但是,当使用 Jackson Binary CBOR Serializer 时,我有以下输出:
82BF02BF6163F5FFFFBF03BF61700AFFFF
这并没有错,但没有优化......我有额外的 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();
}
Run Code Online (Sandbox Code Playgroud)
这是 Jackson 二进制格式库的错误还是我缺少 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();
}
Run Code Online (Sandbox Code Playgroud)
我有以下输出:
82A102A16163F5A103A161700A