【问题标题】:Difference building JSON object with Yasson and Johnzon使用 Yasson 和 Johnzon 构建 JSON 对象的差异
【发布时间】:2019-09-18 09:55:30
【问题描述】:

我有以下使用 JSON 处理 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
    }
  }
}

【问题讨论】:

  • 应该加了,第二行正在抛出异常:generator.writeStartObject(descriptor.getClass().getName());

标签: java json yasson apache-johnzon


【解决方案1】:

代码看起来不错 不妨试试今天发布并符合 JSON-B 测试的 johnzon 1.2.1。 如果它确实有效,解决方法就是序列化地图而不是手动使用生成器,这不是性感但便携。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多