问题标签 [jsr-353]

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 投票
2 回答
6706 浏览

java - JSR-353 如何使用 javax.json.JsonObjectBuilder 添加空值

由于 javax.json 文档建议创建 JsonObject 的方法是使用提供的构建器,例如:

此示例为给定键添加值。在现实生活中,这些值可能来自某些(pojo)域对象,例如:

如果键或值为空,JsonOBjectBuilder 会抛出 NPE。如果客户没有注册年龄,那么上面的代码将抛出 NPE。

所以基本上对于我添加的每个字段,我都必须检查值是否为空并添加实际值,否则不要添加字段或为键添加 JsonValue.NULL。这会导致很多(不受欢迎的)样板文件......

就我而言,我最终得到了自定义 JsonUtils 类,其中包括各种静态方法,例如:

然后调用:

但不知怎的,如果感觉不对。为什么 javax.json 没有提供更简单的方法来添加空值(没有 if else 样板)或者我错过了什么?

我批评 JSR-353 api 的主要观点是,尽管它看起来像一个非常流畅的api(参见 apidoc 的顶级示例),但实际上并非如此。

0 投票
2 回答
189 浏览

java - 如何使用 JSR 353(用于 JSON 处理的 Java API)将对象附加到 json 文件

使用 JSR-353 ( https://jsonp.java.net/index.html ) 我想打开一个 json 文件并在根数组中附加一些对象,例如:

我想要这样的代码:

并最终获得:

注意:我不想在内存中加载完整的 json 来附加我的数据。

0 投票
2 回答
4976 浏览

java - 如何在没有方法链的情况下使用“JSR-353:用于 JSON 处理的 Java API”

我想通过使用新的 JSR-353 来分享我的问题/答案,它是用于 JSON 处理的 Java API。具体来说,您可以在 2 个不同的“API”流和对象 API 中操作 JSON 数据。

如果你在谷歌中输入“jsr-353 教程”,你会得到很多结果。

https://jcp.org/en/jsr/detail?id=353 ~ 具体请求的详细信息。

https://jsonp.java.net/ ~ API 的主站点,还将您链接到位于https://docs.oracle.com/javaee/7/tutorial/doc/jsonp 的“文档”下的 Oracle 教程。 htm 我稍后会详细讨论本教程。

最后是这个

http://www.javabeat.net/java-json-api-jsr-353/

我想先谈谈最后一个链接,因为它为我提供了很多很好的细节,也是目前仅有的真正教程之一(还有其他的,但它们基本相同)。

我真正尝试了解的 API 从新到不仅是这个 API,而且是一般的 JSON。

何时使用 Streaming API 和 Object Model API?

如果您希望将 JSON 数据写入像文件这样的字符流或字节流,那么 Streaming API 将是最佳选择,因为它直接执行写入缓冲区的操作,而无需在内存中构造对象树,即那里不是在创建最终 JSON 数据之前生成的中间形式。

如果您想将 JSON 数据作为对象树保存在内存中,即不写入任何流,而是将树存储在内存中,以便可以重用 JSON 数据而无需重新解析它,或者也可以将对象树序列化为持久化/保存 JSON 数据。这里 JSON 数据将以对象树的形式表示。

现在,Streaming API 描述对我来说很有意义,我需要保存一个文件,所以这对我来说很有意义。

至于对象 API,它在做什么也很有意义,保存对象以便我以后可以在我的代码中重用它,太棒了。

问题是我没有得到我的问题的答案,我将解释我现在到底在寻找什么。

我的问题是:

我基本上有 1 个包含其他对象/数组的对象。

最初我使用 BufferedWriter 将数据写入文本文件的新行。

我的格式看起来像这样。

然后完成。授予数字等是占位符,实际上从写入数据到循环量的所有内容都是我从另一个文件中读取的可变数据。

如您所见,我不能使用 JSR-353 附带的传统“方法链接”。

至于方法链是什么,请查看 wiki http://en.wikipedia.org/wiki/Method_chaining。使用 Streaming API 的方法链示例如下所示,如上面的教程所示:

我还查看了 Oracle 教程,当我在寻找一种保存文件的方法时,我看到了“生成/解析”,这让我有点困惑。

https://docs.oracle.com/javaee/7/tutorial/doc/jsonp001.htm

19.1.3 生成和解析 JSON 数据

对于生成和解析 JSON 数据,有两种编程模型,类似于用于 XML 文档的那些。

流模型使用基于事件的解析器,一次读取一个元素的 JSON 数据。当对象或数组开始或结束、找到键或找到值时,解析器生成事件并停止处理。每个元素都可以由应用程序代码处理或丢弃,然后解析器继续处理下一个事件。这种方法适用于本地处理,其中元素的处理不需要来自其余数据的信息。流模型通过一次使用一个元素进行函数调用来生成给定流的 JSON 输出。

该教程提到了这一点,但它究竟是什么意思令人困惑,特别是我认为这是为了写作而不是阅读。当它提到最后一行(以粗体显示)时,它没有多大意义,为什么它一次只做一个,并且看起来它只处理对象的一部分,而不是整体,正如 Object API 提到的那样处理整棵树。

因此,我没有处理 Streaming API,而是从 Object API 开始。我首先尝试将文件保存到 FileWriter,但什么都不会保存。最终我切换到 StringWriter 并在我的项目中使用它。我决定在完成我的结构后切换回 FileWriter 并以某种方式保存到文件中,但我意识到我的部分代码在最后被切断了。我试着做一个很小的结构,它什么也不会打印。

0 投票
3 回答
3438 浏览

json - Jackson 和 Gson 是否直接实现标准 JSR-353?

我在网上找不到我的问题的答案(也许我搜索得不够好,因为我仍然是这方面的新手)。

谁能告诉我JacksonGson是否实现了标准JSR 353: Java™ API for JSON Processing。我想使用标准代码编写。

0 投票
2 回答
9105 浏览

java - 实现 JSR-353 (JSON) 的 API 是什么

我刚刚发现 Jackson 没有实现 JSR-353 并且我们已经设计了该模块.. 所以我急切地想找到这个 API 的替代品来开始工作!:D

我搜索了一个实现该标准的 API,但找不到任何有趣的结果,因为我们计划使用该标准进行编码并强制系统使用特定的实现(我正在拼命寻找的 API)

0 投票
1 回答
431 浏览

java - 是否可以更改标准 jsr-353 api 使用的提供程序?

我正在使用 JSON JSR-353 api 处理器(jar javax.json-api-1.0.jar)来解析 JSON 文件(使用流式方法)并添加了 JAR“javax.json-1.0.4.jar”,其中包含默认提供程序“org.glassfish.json.JsonProviderImpl”(没有第二个 jar,当创建 JsonParser “JsonParser parser = Json.createParser(json);”时,我有异常“Provider org.glassfish.json.JsonProviderImpl not found”) )

我的问题是:

我需要使用 Jackson 的实现,那么如何将其设置为 JSON JSR-353 API 的提供者?

0 投票
1 回答
1389 浏览

java - How to write a JsonStructure (JSR-353) XmlAdaptor for JAXB MOXy?

I need to wrap some arbitrary JSON content into a POJO that is then serialized with MOXy/JAXB to JSON, but could not figure out how to bind a JsonObject with JAXB. I only need to marshall the JsonObject, unmarshalling is not required.

i.e. having the POJO:

how to put an arbitrary JSON content in 'MsgPOJO.content', and serialize it:

so that this would be the output:

I was thinking about annotating the MsgPOJO.content with a @XmlJavaTypeAdapter, but this does not seem to get me anywhere, since the JSON content could be arbitrary.

It would be nice if moxy could marshal JsonObject or JsonStructure, so I could just define the POJO like:

Is there a way to make this work? Or is it a limitation in MOXy/JAXB?