373.5. 命名空间映射


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

为缩小差距,Json-lib 有一个选项来绑定命名空间声明,格式为 prefixs 和 namespace URIs 到 XML 输出元素,同时 unmarshalling (例如从 JSON 转换为 XML)。例如,提供以下 JSON 字符串:

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

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

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

XmlJsonDataFormat.NamespacesPerElementMapping 包含元素名称和映射 [prefix adjust namespace URI]。为了便于映射多个前缀和命名空间 URI,NamespacesPerElementMapping (String 元素, String pipeSeparatedMappings) 构造器采用基于 String 的 pipe- separated 序列 [prefix, namespaceURI] 对: |ns2|http://camel.apache.org/personalData|ns3|http://camel.apache.org/personalData2|

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

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

完整代码类似如下:

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. Example

在以下 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 规格定义了 JSON 对象,如下所示:

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

正因如此,元素在输出 XML 中以不同顺序排列。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.