如何将单个子 xml 元素转换为 Json 数组

ViS*_*ViS 4 java xml json wso2-esb

我正在使用 WSO2 ESB 并尝试将 XML 有效负载转换为 Json。

<property name="messageType" value="application/json" scope="axis2"/>
Run Code Online (Sandbox Code Playgroud)

上面的属性中介器将我的 xml 转换为 json,一切正常。

问题出在我的 XML 负载中的子节点上。

当 xml 为

<users>
    <user>user1</user>
    <user>user2</user>
</users>
Run Code Online (Sandbox Code Playgroud)

它被转换为

"users": {
    "user": [
        "user1", "user2"
    ]
}
Run Code Online (Sandbox Code Playgroud)

所以我的其余完整端点接收 json 有效负载,该负载期望列表“用户”工作正常。

但是当 xml 是

<users>
    <user>user1</user>
</users>
Run Code Online (Sandbox Code Playgroud)

转换后的 json 看起来像这样,

"users": {
    "user": "user1"
}
Run Code Online (Sandbox Code Playgroud)

因此,期望“用户”列表的restfull端点没有得到列表,而是发送了一个字符串,并且数据类型不匹配导致找不到端点。

如果进一步尝试,

<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://james.newtonking.com/projects/json">
    <users>
        <user json:Array="true">user1</user>
    </users>
</Data>
Run Code Online (Sandbox Code Playgroud)

这个转换给出一个 json 为,

 {
  "Data": {
    "users": {
      "user": {
        "@Array": "true",
        "$": "user1"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要的是,

 {
  "Data": {
    "users": {
      "user": {
        [
        "user1"
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

经过杰伊的建议,

谢谢杰伊,

在您输入后,我尝试了一些东西,但在某些时候我陷入了困境。这就是我正在尝试的,

mc.setPayloadJSON(
            {
                "someIds" : {
                    "someIdList" : (vUIdLen &gt; 1 ? mc.getProperty("someIdList") : "["+someIdList+"]")
                }
            });</script>
Run Code Online (Sandbox Code Playgroud)

我正在检查子节点的长度,如果它大于 1,则使用该节点之前捕获的值 ["abc","pqr"],如果它小于或 = 1,则使用该节点的值使用单个 json 值并在“[”+someIdList+“]”内构造它,但它们中的任何一个都没有被附加。它给出错误“脚本引擎在执行内联 js 脚本函数中介时返回错误”。

我如何正确附加这个。

(vUIdLen &gt; 1 ? mc.getProperty("someIdList") : "["+someIdList+"]")
Run Code Online (Sandbox Code Playgroud)

上面的 mc.getProperty("someIdList") 的值为 ["abc","pqr"],"["+someIdList+"]" 中的 someIdList 的值为 abc。

请建议。

jay*_*jay 6

还有另一种解决方案,无需使用脚本中介,您可以添加

<?xml-multiple?> 
Run Code Online (Sandbox Code Playgroud)

处理您的有效负载的指令。如下;

<users>
    <?xml-multiple?>
    <user>user1</user>
</users>
Run Code Online (Sandbox Code Playgroud)

这将为用户创建 json 数组。

{"users": {"user": ["user1"]}}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。