使用 Yasson 和 Johnzon 构建 JSON 对象的区别



我有以下代码使用JSON Processing API(描述符是我尝试序列化的接口(。

public void serialize(ComponentDescriptor descriptor, JsonGenerator generator, SerializationContext ctx) {
generator.writeStartObject();
generator.writeStartObject(descriptor.getClass().getName());
generator.write("name", descriptor.getName());
ctx.serialize("settings", descriptor.getSettings(), generator);
generator.writeEnd();
generator.writeEnd();
}

这适用于 Yasson,但如果我尝试使用 Johnzon 序列化同一对象,我会得到:

javax.json.stream.JsonGenerationException: state START_OBJECT does not accept a value

这两种实现之间显然存在差异(我猜不应该有(,但是编写对象的正确方法是什么(理想情况下,它可以在两者中工作(?

我期望的输出类型是:

{
"my.package.TestDescriptor": {
"name": "Test",
"settings": {
"host": "localhost",
"port":8080
}
}
}

代码看起来不错 也许可以尝试一下今天发布并符合JSON-B测试的johnzon 1.2.1。 如果它不起作用,解决方法可以是序列化地图而不是手动使用生成器,不是性感但便携。

最新更新