2016-02-26 140 views
2

我正在使用WSO2 ESB并试图将我的XML负载转换为Json。如何将单个子元素xml元素转换为Json数组

<property name="messageType" value="application/json" scope="axis2"/> 

上述属性介体将我的xml转换为json,并且一切正常。

问题在于我的XML有效载荷中的子节点。

当XML是

<users> 
    <user>user1</user> 
    <user>user2</user> 
</users> 

它被转化为

"users": { 
    "user": [ 
     "user1", "user2" 
    ] 
} 

所以我休息充分端点recieving这是期待一个列表“用户”的JSON有效载荷工作正常。

但是当XML是

<users> 
    <user>user1</user> 
</users> 

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

"users": { 
    "user": "user1" 
} 

因此,这是预期的“用户”列表中的问题的REST端点没有得到一个列表,而一字符串被发送并且数据类型不匹配导致找不到端点。

如果进一步的尝试,

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

这个转换提供了一个JSON作为,

{ 
    "Data": { 
    "users": { 
     "user": { 
     "@Array": "true", 
     "$": "user1" 
     } 
    } 
    } 
} 

我需要的是,

{ 
    "Data": { 
    "users": { 
     "user": { 
     [ 
     "user1" 
     ] 
     } 
    } 
    } 
} 

周杰伦的建议后,

谢谢Jay,

经过您的输入,我尝试了一些东西,但我被卡住了一些点。这就是我想,

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

我检查子节点的lenth,如果是大于1比我现在用的是之前捕获价值为节点,它是[“ABC”,“焊接工艺评定“],如果它小于或等于1,那么我将使用单个json值并在”[“+ someIdList +”]“中构造它,但其中任何一个都不会被追加。它会给出错误,如“脚本引擎返回执行内联js脚本函数调解的错误”。

如何正确追加此项。

(vUIdLen &gt; 1 ? mc.getProperty("someIdList") : "["+someIdList+"]") 

mc.getProperty的值( “someIdList”)以上是[ “ABC”, “PQR”]和someIdList的值在 “[” + someIdList + “]” 来为abc。

请建议。

回答

2

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

<?xml-multiple?> 

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

<users> 
    <?xml-multiple?> 
    <user>user1</user> 
</users> 

这将为用户创建json数组。

{"users": {"user": ["user1"]}} 

希望这会有所帮助。

+0

老兄,你真了不起。上帝祝福你。 – ViS

相关问题