使用WSO2转换JSON数组

时间:2017-11-09 16:29:00

标签: json wso2 wso2esb wso2-am wso2carbon

我们是否知道如何使用其他字段将json转换为带有新json的数组。 我有一个例子json。这个样本json是动态的。数组中可以有三个或四个元素。

"insurer": [ 
     {
    "data": {
        "first_name": "Name",
        "last_name": "SureName"
    }
    },
   {
    "data": {
        "first_name": "Name1",
        "last_name": "SureName1"
    }
}],

我想收到json

    "insurer": [ 
     {
    "data": {
        "name": "Name",
        "nameLast": "SureName"
    }
    },
   {
    "data": {
        "name": "Name1",
        "nameLast": "SureName1"
    }
}],

我做了这个序列

 <foreach id="foreach_1" expression="//insurer/data">
        <sequence>
           <payloadFactory media-type="json">
              <format>{ "name" : "$1", 
                        "nameLast" : "$2"                            }                  
              </format>
              <args>
                 <arg evaluator="xml" expression="//first_name"/>
                 <arg evaluator="xml" expression="//last_name"/>
              </args>
           </payloadFactory>
           <log>
              <property name="message" value="petla"/>
           </log>
        </sequence>
     </foreach>

不幸的是,我只是得到了一个部分json。你可能有一个想法

 { ,"name" : "Name1", "nameLast" : "SureName1" }

我正在使用WSO2 ESB V6.1.0

1 个答案:

答案 0 :(得分:2)

对序列进行3次更改后,这应该按预期工作。

  1. 首先将foreach modiator的表达改为//保险公司, 因为你的JSON消息有保险公司的数组。
  2. 接下来,使用XML作为 有效负载工厂介体的媒体类型和组成单个 预期的保险公司要素。
  3. 最后设置messageType属性以将消息类型更改为JSON。
  4. 在下面找到示例代码。

         <foreach xmlns:ns="http://org.apache.synapse/xsd"
                  expression="//insurer">
            <sequence>
               <payloadFactory media-type="xml">
                  <format>
                    <insurer>
                       <data>
                          <name>$1</name>
                          <nameLast>$2</nameLast>
                       </data>
                    </insurer>
                  </format>
                  <args>
                     <arg evaluator="xml" expression="//first_name"/>
                     <arg evaluator="xml" expression="//last_name"/>
                  </args>
               </payloadFactory>
            </sequence>
         </foreach>
         <property name="messageType" value="application/json" scope="axis2"
                   type="STRING"/>