问题标签 [jsonb-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
227 浏览

java - JSON-B 通过设置 withNullValues(true) 命中 NPE 序列化适配器

问题

JSON-B 用户指南在这里建议我应该能够null使用以下代码序列化值:

这里的StatusAdapter是我自己的JsonbAdapter impl,用于序列化应用程序的Status类,看起来像这样:

状态适配器

但是,当这些 getter 之一返回时null,我最终会遇到以下异常:

引起:java.lang.NullPointerException:JsonObjects 名称/值对中的值不能在 org.glassfish.json.JsonObjectBuilderImpl.add(JsonObjectBuilderImpl.java 的 org.glassfish.json.JsonObjectBuilderImpl.validateValue(JsonObjectBuilderImpl.java:222) 处为空:90) 在 mypkg.StatusAdapter.adaptToJson(StatusAdapter.java:14) 在 mypkg.StatusAdapter.adaptToJson(StatusAdapter.java:47) 在 org.eclipse.yasson.internal.serializer.AdaptedObjectSerializer.serialize(AdaptedObjectSerializer.java:103)

pom.xml

我使用了JSON-B入门页面中最新版本的 Maven 依赖项:

问题

那么我误解了API吗?或者这是 JSON 相关库的错误组合?其中一个有错误?

我也意识到,当需要反序列化null它时,序列化 a 可能会给我带来第二个问题。如果这有助于指导答案,我将希望稍后使用 JSON-B 进行反序列化。谢谢你。

更新:

这个yasson 问题表明它可能是一个错误。在那里添加了更多细节。

0 投票
1 回答
94 浏览

java - 在枚举的反序列化/序列化过程中寻找对这种奇怪行为的解释

最近我在枚举到 JSON 的反序列化/序列化过程中遇到了一个奇怪的行为。

我将相关部分简化为一个简单的示例(请参见下面的代码)。基本上你有一个包含枚举条目的列表。您序列化列表,然后反序列化它。如果您检查该新(反序列化)列表是否包含某些枚举条目,您将始终得到“假”作为答案,即使该列表实际上包含该条目。

自己分析了一下发现,反序列化列表后,内容不再是枚举类型,而是包含字符串。

我想了解为什么会发生这种情况以及如何避免它。我的目标是在反序列化后再次获得枚举条目列表,而不是字符串列表。

0 投票
1 回答
114 浏览

jax-rs - 强制 JSON-B 在生成 JSON 时将数字写为字符串

我在我的 Java 代码中处理大量数字,并且由于 JavaScript 的限制(即整数的 32 位支持),我需要将这些数字写为我的应用程序返回的 JSON 中的字符串。

是否有全局配置或注释可以让我这样做?如果可能,我想避免编写自定义序列化程序/适配器。

我正在使用带有新 JSON-B/Yasson 支持的 RestEasy。

0 投票
1 回答
875 浏览

java - Ignore enum case with JSON-B / Yasson

Using JSON-B / Yasson is there any way to ignore case of enums when deserializing?

part of incoming JSON: "condition" : "new" The problem is that the incoming JSON uses the enums in lowercase.

0 投票
1 回答
310 浏览

java - jsonb 1.0 / eclipse yasson 忽略没有 bean 访问器方法的私有属性

根据我假设是官方用户指南http://json-b.net/users-guide.html,引擎应该序列化它找到的任何属性,有或没有 bean 访问器方法(我意识到 Dog 示例使用 public字段,但请参阅私有字段的 Person 示例)。

鉴于这些类:

当我像这样序列化它时:

输出是这样的:

我看到的是,在 Rectangle 中,只有宽度被序列化,因为它是公共的。length1 和 length2 被忽略,因为它们是私有的,即使 length2 上有属性注释。Rectangle2 是完全序列化的,因为它有 bean 方法。

一定要这样吗?要求我将所有字段公开且可变以启用序列化似乎是一个巨大的限制。

我的依赖项是这样设置的:

0 投票
1 回答
299 浏览

java - 如何在没有设置器的情况下使用 JSON-B 解组/反序列化集合

我喜欢编写我的 POJO,而不是为集合设置 setter。

JSON-B 序列化工作正常,但反序列化不起作用,因为没有儿童设置器。

问题:我应该如何解决这个问题?

0 投票
1 回答
313 浏览

jsonb - JSON-B 使用 toString 而不是注册的 Adapter 序列化 Map 键

我有一个返回 a 的 JAX-RS 服务,Map<Artifact, String>并且我已经注册了一个

在反序列化参数时看到命中,但在序列化返回值时没有看到命中,而是使用 Artifact toString()。如果我将返回类型更改为 Artifact,则会调用适配器。我的印象是 Map 将使用内置方式进行序列化,然后为 Artifact 调用适配器。

解决方法是什么?为整个地图注册一个适配器?

我将线程堆栈转储到我的 toString 中,它证实了我的怀疑

在这一点上,序列化程序是否一心想要使用 toString?

我试过了

}

公共类 PersonAdapter 实现 JsonbAdapter{

}

公共类测试{

}

但仍然以 Person 的 toString() 结束

在此先感谢,尼克

0 投票
1 回答
677 浏览

json - 使用 JSON-B 1.0(例如 Yasson、Java EE 8)有效地将 JsonObject 转换为 pojo

一个 JsonObject 可以通过以下方式转换成它对应的类实例:

Pojo pojo = JsonbBuilder.create().fromJson(jsonObject.toString(), Pojo.class)

但是,使用 String 似乎是低效的,它jsonObject.toString()是包含相同信息的其他中间表示。我需要在对象绑定之前转换 jsonObject。那么有没有更有效的方法来实现从 JsonObject 的绑定?

(注意我想用 Java EE 8 标准来实现,所以 Gson 和 Jackson 不是一个选项,但可能是它的概念)。Yasson小组中目前没有答案,所以希望有人能找到这个。Michael Schnell 还提出了JsonStructure绑定,但目前还没有解决方案。

0 投票
1 回答
2068 浏览

java - 为什么在使用带有 JSON-B 的 Yasson 时需要来自 Glassfish 的 javax.json 作为依赖项?

为了使用Java API for JSON Binding (JSON-B),我发现有必要在我的Maven POM中包含以下三个依赖项:

前两个对我来说很有意义。

javax.json➥ 但是来自Glassfish的第三个依赖项到底给聚会带来了什么?为什么我的应用程序需要它才能运行?

如果省略,在运行时Jsonb jsonb = JsonbBuilder.create();,我会收到此错误:

javax.json.JsonException:未找到提供程序 org.glassfish.json.JsonProviderImpl

我很困惑,因为我认为 Yasson我的 JSON 处理实现。

0 投票
1 回答
859 浏览

json - localdate json 与 Wildfly 服务器中的 yasson 实现绑定

如果我在实体类中使用 LocalDate 类型,如果我发送 POST 请求,则会收到以下错误:

如果我将我的属性类型从

有用!

我已经使用 Wildfly 15 和 16(Eclipse Yasson 实现)进行了测试,新的 Java 日期类似乎不适用于 JSON-Bindings。

这是不支持还是我有什么问题?