Apache Camel:XML到JSON的转换

时间:2018-06-19 12:18:10

标签: json xml

我有一个像这样的xml文件:

<JsonPerson>
        <Id>1111</Id>
    <personInfo>
        <firstName>aaa</firstName>  
        <lastName></lastName>   
    </personInfo>
</JsonPerson>

我在路由中使用xmljson标记将格式从xml更改为json,输出如下:

 {
  "Id" : "1111",
  "personInfo" :
    {
    "firstName" : "aaa",
    "lastName" : [],
    }
  }

但是我的愿望输出是这样的:

{
"Id" : "1111",
"personInfo" :
    {
    "firstName" : "aaa",
    "lastName" : "",
    }
 }

如何做到这一点(无需编写任何额外的Java代码)?
提前致谢。

1 个答案:

答案 0 :(得分:1)

有十多种将XML转换为JSON的方法,反之亦然,没有一种方法能够始终如一地给出您真正想要的答案:那是因为您的期望通常取决于对所拥有数据语义的某种理解但是软件库没有。

显示的XML片段不是完整的格式正确的XML文档,这无济于事;仅提供部分输入,我们只能为您提供部分解决方案。

如果您想通过精确控制进行XML到JSON的转换,我的建议是使用XSLT 3.0。像这样:

<xsl:output method="json">

<xsl:template match="/*" priority="1">
  <xsl:map>
    <xsl:apply-templates/>
  <xsl:map>
</xsl:template>

<xsl:template match="*[*]" priority="2">
  <xsl:map-entry key="local-name()">
    <xsl:map>
      <xsl:apply-templates/>
    <xsl:map>
  </xsl:map-entry>
</xsl:template>

<xsl:template match="*"  priority="3">
  <xsl:map-entry key="local-name()">
    <xsl:sequence select="string(.)"/>
  </xsl:map-entry>
</xsl:template>