373.5. 命名空间映射


XML 具有具有完全合格的元素和属性的命名空间;JSON 没有。执行 XML-JSON 转换时,您需要考虑这一点。

为缩小差距,Json-lib 有一个选项,可以将前缀和命名空间 URI 形式的 namespace 声明绑定到 XML 输出元素,同时将来自 JSON 转换为 XML。例如,提供以下 JSON 字符串:

{ "pref1:a": "value1", "pref2:b": "value2" }

您可以要求 Json-lib 在元素 pref1:apref2:b 上输出命名空间声明,以将前缀 pref1pref2 绑定到特定的命名空间 URI。

若要使用此功能,只需创建 XmlJsonDataFormat.NamespacesPerElementMapping 对象,并将它们添加到 namespaceMappings 选项(这是 List)。

XmlJsonDataFormat.NamespacesPerElementMapping 包含元素名称和映射的 [prefix TOKEN 命名空间 URI]。为便于映射多个前缀和命名空间 URI,NamespacesPerElementMapping (String 元素, String pipeSeparatedMappings) constructor 采用基于 String 的管道和命名空间 URI 序列 [prefix, namespaceURI] 对: |ns2|http://camel.apache.org/personalData|ns3|http://camel.apache.org/personalData2|

要定义 default 命名空间,请只将对应的键字段留空: |ns1|http://camel.apache.org/test1||http://camel.apache.org/default|

将 namespace 声明绑定到元素 name = 空字符串会将这些命名空间附加到根元素。

完整代码类似如下:

XmlJsonDataFormat namespacesFormat = new XmlJsonDataFormat();
List<XmlJsonDataFormat.NamespacesPerElementMapping> namespaces = new ArrayList<XmlJsonDataFormat.NamespacesPerElementMapping>();
namespaces.add(new XmlJsonDataFormat.
                       NamespacesPerElementMapping("", "|ns1|http://camel.apache.org/test1||http://camel.apache.org/default|"));
namespaces.add(new XmlJsonDataFormat.
                       NamespacesPerElementMapping("surname", "|ns2|http://camel.apache.org/personalData|" +
                           "ns3|http://camel.apache.org/personalData2|"));
namespacesFormat.setNamespaceMappings(namespaces);
namespacesFormat.setRootElement("person");

在 Spring DSL 中,您可以实现相同的功能。

373.5.1. 示例

在以下 JSON 字符串的 Java 片断中使用命名空间绑定:

{ "name": "Raul", "surname": "Kripalani", "f": true, "g": null}

将生成以下 XML:

<person xmlns="http://camel.apache.org/default" xmlns:ns1="http://camel.apache.org/test1">
    <f>true</f>
    <g null="true"/>
    <name>Raul</name>
    <surname xmlns:ns2="http://camel.apache.org/personalData" xmlns:ns3="http://camel.apache.org/personalData2">Kripalani</surname>
</person>

请记住,JSON spec 定义 JSON 对象,如下所示:

对象是未排序的名称/值对集合。[…​]。

这就是为什么元素在输出 XML 中处于不同顺序的原因。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.