我可以从类似于 jaxb 的 json 数据创建类吗
Posted
技术标签:
【中文标题】我可以从类似于 jaxb 的 json 数据创建类吗【英文标题】:Can I create classes from json data similar to jaxb 【发布时间】:2011-12-21 22:55:30 【问题描述】:所以我的代码是 api 的客户端,数据以 xml 形式返回,我能够从该 xml 的一些示例创建有效的 xsd 文件,然后从模式生成一些 JAXB 类,因此我的代码现在可以加载和无需直接使用 Xml 即可处理 xml 数据。
但不幸的是,在最新版本的 api 中,他们放弃了对 xml 的支持,只返回 json。有没有类似于我的 xml 进程的 json 进程?
如果无法从模式中获得解决方案,那么如果我手动创建我的 json 类,我可以使用它们来自动输入原始 json 数据,所以至少我只需要处理一次 json。
编辑:也许https://github.com/ko5tik/jsonserializer 会有用
更新:仅供参考,所以我查看了 jsonschema2pojo,但这仅从模式创建 pojo,而我实际上并没有 json 模式,只有实际的 json。我尝试从我拥有的示例 json 创建一个模式,但除了最简单的示例之外,它并没有让它工作。
然后我查看了http://wiki.fasterxml.com/JacksonInFiveMinutes,如果 Id 设法让它工作,Jackson 将能够使用 jsonschema2pojo 创建的 pojo。因此,我尝试按照示例进行操作,并根据我拥有的 json 数据创建了一个 POJO,这很容易,然后我尝试使用它进行完整的数据绑定,并且它第一次工作。
所以总而言之,我将使用 Jackson 来处理 web 服务返回的 json,我必须为每个实体手动创建一个 POJO,但至少它可以工作。
【问题讨论】:
Generate Java class from JSON?的可能重复 仅供参考,从 v0.3.3 开始,jsonschema2pojo 还支持从示例 JSON 文档(不是模式)生成类型。 【参考方案1】:至于回答,不妨试试“jsonschema2pojo”。
但类似的问题已经被问过:
How can I parse a JSON schema and create a default json object or generate a java class? Generate Java class from JSON? Is there a tool to generate a JSON schema from an XML schema through Java?【讨论】:
【参考方案2】:如果您想从示例 JSON 文件创建 POJO,我创建了一个可以提供帮助的(hacky)ruby 脚本。我在这里的另一个答案中添加了更多详细信息:https://***.com/a/8585423/1109175
你可以在github上找到代码:https://github.com/wotifgroup/json2pojo
【讨论】:
【参考方案3】:我认为没有与 XSD 等效的 JSON,这使得您所要求的内容很难实现。首先,生成器程序无法可靠地推断出需要用于 JSON 对象属性的 Java 类型。 (在 XML 的情况下,你做了这些推论,并在相应的 XSD 中表达出来。)
【讨论】:
JSON Schema (json-schema.org) 已经存在了很长一段时间......当然,它可能取决于等效性的定义,但它有很多相似之处。【参考方案4】:不,我没有看到这样做的方法... JSON 没有架构定义,因此没有元数据可以从中生成类。
编辑:我已经更正了,有一个架构定义(草案),但是自今年年初以来它已经过期,我还没有遇到任何提供的架构。
【讨论】:
嗯,这就是我所担心的,所以为什么每个人都从 xml 转向 IMO 是一个更糟糕的解决方案? 因为 JSON 的数据结构更轻量级,更容易被“劣质”设备(如手机等)处理。此外,数据结构可以直接包含在 javascript 中(无需编写自定义反序列化机制)。 JSON = JavaScript 对象表示法。 但我不是用 Javascript 编写的(谢天谢地),我真的认为他们应该同时提供 @StaxMan 您在很多方面都不正确,请允许我详细说明:XML 确实可以具有内置(内联)模式 - XSD 和 DTD 的形式。如果您花时间查看已链接到的 JSON 模式站点,并阅读模式草稿,您会发现它已于 2011 年 5 月 26 日过期。模式的喜爱,或者我对它们的喜爱是您(消费者和提供者)同意签订合同——这使得数据交换变得更加容易。有了架构,还可以进行机器验证,这意味着不需要人工验证。 @StaxMan 模式为客户端提供了一种定义他们接收的数据的方式,如果没有模式并且您更改了发送的数据,那么客户端仍然必须更改,但很难解决发生了什么变化以上是关于我可以从类似于 jaxb 的 json 数据创建类吗的主要内容,如果未能解决你的问题,请参考以下文章