XML/JSON 处理中
XML/JSON processing
我正在为我的应用程序编写一组 REST API 到 XML 和 JSON 内容类型。在设计和实现这些 API 时,我想对 XML/JSON 处理库做出明智的选择。以下是 API 的各种非功能性要求:
- 性能 - APIs 处理大量数据(有效负载可以以兆字节为单位)。 API 输入大小小于 API 输出大小。
- 过滤功能 - API 的调用者应该能够指定过滤标准,根据该标准调整输出以优化带宽消耗。
作为我们研究和分析的一部分,我们确实查看了 DOM APIs 和 JAXB/Jackson APIs。考虑到上面列出的非功能性要求,请 advice/suggestion 选择正确的 API。
这是我对使用这些 API 编组和取消编组过程的理解。如有不妥请指正
- DOM APIs - 2 步过程(使用 DOM 解析器和 XML 序列化器)
XML/JSON 到 DOM 到 POJO & POJO 到 DOM 到 XML/JSON
- JAXB APIs - 单步过程(使用注释)
XML/JSON 到 POJO & POJO 到 XML/JSON
尽管 JAXB 注释更简单、更方便,但就 marshalling/unmarshalling 而言,DOM API 的性能更好吗?
此外,对于何时选择什么 XML 处理库,是否有任何指导方针?
对于多种内容类型处理,选择不同的库是否更好。例如。 JSON 的 Jackson 和 XML 的 JAXB(纯粹为了性能)。
对于 JSON 内容类型,将 JSON 转换为 DOM 对象是否有任何开销?
好的,有几点:
- 是的,在 JSON 和 DOM (XML) 之间转换不仅有显着的(而且通常是不必要的)开销。更糟糕的是,由于 JSON 和 XML 具有不同的信息模型,它通常是有损的。在我看来,应该避免这个选项(Jettison 等人)。
- 对于JAXB风格的操作,还有Jackson XML模块(https://github.com/FasterXML/jackson-dataformat-xml/),在同时支持XML和JSON[=24=的时候可以很方便]
- DOM 是较慢的方法,部分原因是两阶段处理,部分原因是内存使用比直接数据绑定高 3-5 倍(取决于数据类型)
基于 DOM 的方法的一些好处是:
- 它是 XML 特定的,因此如果特定 XML 方面或工具问题(使用 XPath,XML 架构),则可以访问 [=39= 的所有详细信息] 用法
- 由于 DOM 是无类型的、灵活的,它有时更适合动态和松散(...或者,糟糕...)结构化数据。
但我同意@lexicore 的观点,如果其他方法不起作用,DOM 应该是最后的选择。尤其是在处理大数据的时候。
我正在为我的应用程序编写一组 REST API 到 XML 和 JSON 内容类型。在设计和实现这些 API 时,我想对 XML/JSON 处理库做出明智的选择。以下是 API 的各种非功能性要求:
- 性能 - APIs 处理大量数据(有效负载可以以兆字节为单位)。 API 输入大小小于 API 输出大小。
- 过滤功能 - API 的调用者应该能够指定过滤标准,根据该标准调整输出以优化带宽消耗。
作为我们研究和分析的一部分,我们确实查看了 DOM APIs 和 JAXB/Jackson APIs。考虑到上面列出的非功能性要求,请 advice/suggestion 选择正确的 API。
这是我对使用这些 API 编组和取消编组过程的理解。如有不妥请指正
- DOM APIs - 2 步过程(使用 DOM 解析器和 XML 序列化器)
XML/JSON 到 DOM 到 POJO & POJO 到 DOM 到 XML/JSON - JAXB APIs - 单步过程(使用注释)
XML/JSON 到 POJO & POJO 到 XML/JSON
尽管 JAXB 注释更简单、更方便,但就 marshalling/unmarshalling 而言,DOM API 的性能更好吗?
此外,对于何时选择什么 XML 处理库,是否有任何指导方针? 对于多种内容类型处理,选择不同的库是否更好。例如。 JSON 的 Jackson 和 XML 的 JAXB(纯粹为了性能)。
对于 JSON 内容类型,将 JSON 转换为 DOM 对象是否有任何开销?
好的,有几点:
- 是的,在 JSON 和 DOM (XML) 之间转换不仅有显着的(而且通常是不必要的)开销。更糟糕的是,由于 JSON 和 XML 具有不同的信息模型,它通常是有损的。在我看来,应该避免这个选项(Jettison 等人)。
- 对于JAXB风格的操作,还有Jackson XML模块(https://github.com/FasterXML/jackson-dataformat-xml/),在同时支持XML和JSON[=24=的时候可以很方便]
- DOM 是较慢的方法,部分原因是两阶段处理,部分原因是内存使用比直接数据绑定高 3-5 倍(取决于数据类型)
基于 DOM 的方法的一些好处是:
- 它是 XML 特定的,因此如果特定 XML 方面或工具问题(使用 XPath,XML 架构),则可以访问 [=39= 的所有详细信息] 用法
- 由于 DOM 是无类型的、灵活的,它有时更适合动态和松散(...或者,糟糕...)结构化数据。
但我同意@lexicore 的观点,如果其他方法不起作用,DOM 应该是最后的选择。尤其是在处理大数据的时候。