是否有通过 Java 从 XML 模式生成 JSON 模式的工具?

Posted

技术标签:

【中文标题】是否有通过 Java 从 XML 模式生成 JSON 模式的工具?【英文标题】:Is there a tool to generate a JSON schema from an XML schema through Java? 【发布时间】:2011-12-06 22:37:12 【问题描述】:

是否有人知道我们可以通过 Java 从 XML 模式生成 JSON 模式或从 JSON 模式生成 XML 模式的工具或方法?

【问题讨论】:

Generate Json schema from XML schema (XSD) 的可能重复项 见:***.com/a/30006975/303810 【参考方案1】:

将 XML 转换为 JSON 非常简单,可以通过多种方式完成:

http://answers.oreilly.com/topic/278-how-to-convert-xml-to-json-in-javahttp://www.json.org/javadoc/org/json/XML.html#toJSONObject%28java.lang.String%29

对于从 XML 到 JSON 的转换,看看这个,似乎很简单:

http://www.bramstein.com/projects/xsltjson/http://code.google.com/p/xml2json-xslt/http://json-lib.sourceforge.net/index.html

还有http://x-stream.github.io/ 库允许您在双方进行转换(也可以转换为 POJO)。您可以在此处找到简单的示例用法: Convert XML to JSON format

/edit: ups,看来我没有正确理解问题:P

【讨论】:

XML 到 JSON 也不是很有价值,因为它倾向于产生包含不必要的非 JSON 内容的“franken-JSON”(保留 XML 命名空间信息、属性/元素区别等)。自动转换可能被视为反模式或代码异味。【参考方案2】:

如果您可以获得与 Schema 匹配的 POJO(例如使用 xjc),则可以使用 Jackson 生成 JSON Schema(请参阅 ObjectMapper.generateSchema(...))。

【讨论】:

【参考方案3】:

例如,CXF 可以在 Json 或 XML 中提供请求,因此它必须有一种方法来转换两者。

【讨论】:

不,这不一定意味着转换通过模式,或者甚至在 XML 和 JSON 之间存在转换。相反,许多框架分别生成 XML 和 JSON,作为单独的表示。 POJO 和 JSON 之间的转换比 XML 和 JSON 之间的转换更容易。【参考方案4】:

我希望您能够编写一个 XSLT 脚本,该脚本相当容易地从 XML 模式生成 JSON 结构。这是因为 XSLT 非常乐意读取和转换 XML,而 XML 模式就是 XML。

走另一条路会有点困难。您需要能够读取 JSON 模式并输出 XML 的东西。为此,您需要一个解析器,并且可能需要构建解析的 AST 的东西。有了这个和树遍历,您可能能够相当容易地生成 XML 模式。

ANTLR 可以让您轻松定义语法、构建解析器和 AST。它有某种“结构化文本”生成器,可能适用于遍历 AST。

我们的DMS Software Reengineering Toolkit 类似于 ANTLR,但具有更多的机器。使用 DMS,您可以定义 JSON 语法、构建 AST,然后编写源到源转换以将其映射到表示您的架构的 XML。

【讨论】:

json schema是json,所以只需要一个json解析器 OP 最初的问题是如何从 XML 生成 json。【参考方案5】:

不是很优雅,但是jackson可以生成json schema from a java class 。因此,您可以使用您的 xml 架构 generate java classes from it with jaxb annotations,然后将其生成为 jackson supports jaxb annotations 的 json 架构。

【讨论】:

以上是关于是否有通过 Java 从 XML 模式生成 JSON 模式的工具?的主要内容,如果未能解决你的问题,请参考以下文章

是否有生成 POM.xml 文件的 Java 类?

如何使用 JAXB 从 XML 模式生成 Java 枚举?

从 Java 类生成 JSON 模式

C# 中的 Jaxb 等效项

C# 中的 Jaxb 等效项

是否可以使用 JAXB 从模式映射到 java.util.Map?