问题标签 [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.
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 问题表明它可能是一个错误。在那里添加了更多细节。
java - 在枚举的反序列化/序列化过程中寻找对这种奇怪行为的解释
最近我在枚举到 JSON 的反序列化/序列化过程中遇到了一个奇怪的行为。
我将相关部分简化为一个简单的示例(请参见下面的代码)。基本上你有一个包含枚举条目的列表。您序列化列表,然后反序列化它。如果您检查该新(反序列化)列表是否包含某些枚举条目,您将始终得到“假”作为答案,即使该列表实际上包含该条目。
自己分析了一下发现,反序列化列表后,内容不再是枚举类型,而是包含字符串。
我想了解为什么会发生这种情况以及如何避免它。我的目标是在反序列化后再次获得枚举条目列表,而不是字符串列表。
jax-rs - 强制 JSON-B 在生成 JSON 时将数字写为字符串
我在我的 Java 代码中处理大量数字,并且由于 JavaScript 的限制(即整数的 32 位支持),我需要将这些数字写为我的应用程序返回的 JSON 中的字符串。
是否有全局配置或注释可以让我这样做?如果可能,我想避免编写自定义序列化程序/适配器。
我正在使用带有新 JSON-B/Yasson 支持的 RestEasy。
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.
java - jsonb 1.0 / eclipse yasson 忽略没有 bean 访问器方法的私有属性
根据我假设是官方用户指南http://json-b.net/users-guide.html,引擎应该序列化它找到的任何属性,有或没有 bean 访问器方法(我意识到 Dog 示例使用 public字段,但请参阅私有字段的 Person 示例)。
鉴于这些类:
当我像这样序列化它时:
输出是这样的:
我看到的是,在 Rectangle 中,只有宽度被序列化,因为它是公共的。length1 和 length2 被忽略,因为它们是私有的,即使 length2 上有属性注释。Rectangle2 是完全序列化的,因为它有 bean 方法。
一定要这样吗?要求我将所有字段公开且可变以启用序列化似乎是一个巨大的限制。
我的依赖项是这样设置的:
java - 如何在没有设置器的情况下使用 JSON-B 解组/反序列化集合
我喜欢编写我的 POJO,而不是为集合设置 setter。
JSON-B 序列化工作正常,但反序列化不起作用,因为没有儿童设置器。
问题:我应该如何解决这个问题?
jsonb - JSON-B 使用 toString 而不是注册的 Adapter 序列化 Map 键
我有一个返回 a 的 JAX-RS 服务,Map<Artifact, String>
并且我已经注册了一个
在反序列化参数时看到命中,但在序列化返回值时没有看到命中,而是使用 Artifact toString()。如果我将返回类型更改为 Artifact,则会调用适配器。我的印象是 Map 将使用内置方式进行序列化,然后为 Artifact 调用适配器。
解决方法是什么?为整个地图注册一个适配器?
我将线程堆栈转储到我的 toString 中,它证实了我的怀疑
在这一点上,序列化程序是否一心想要使用 toString?
我试过了
}
公共类 PersonAdapter 实现 JsonbAdapter{
}
公共类测试{
}
但仍然以 Person 的 toString() 结束
在此先感谢,尼克
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绑定,但目前还没有解决方案。
java - 为什么在使用带有 JSON-B 的 Yasson 时需要来自 Glassfish 的 javax.json 作为依赖项?
为了使用Java API for JSON Binding (JSON-B),我发现有必要在我的Maven POM中包含以下三个依赖项:
前两个对我来说很有意义。
jakarta.json.bind-api
是JSR 367定义的JSON-B API 。yasson
是该 API 的参考实现,Eclipse Yasson。
javax.json
➥ 但是来自Glassfish的第三个依赖项到底给聚会带来了什么?为什么我的应用程序需要它才能运行?
如果省略,在运行时Jsonb jsonb = JsonbBuilder.create();
,我会收到此错误:
javax.json.JsonException:未找到提供程序 org.glassfish.json.JsonProviderImpl
我很困惑,因为我认为 Yasson是我的 JSON 处理实现。
json - localdate json 与 Wildfly 服务器中的 yasson 实现绑定
如果我在实体类中使用 LocalDate 类型,如果我发送 POST 请求,则会收到以下错误:
如果我将我的属性类型从
至
有用!
我已经使用 Wildfly 15 和 16(Eclipse Yasson 实现)进行了测试,新的 Java 日期类似乎不适用于 JSON-Bindings。
这是不支持还是我有什么问题?