Mule Dataweave:需要从数组中提取值
Mule Dataweave: Need to extract values from an array
添加了新代码,我试图首先保存 lineData,处理 header 并返回行,但是它不喜欢 setPayloadToLines
<set-variable variableName="lineData" value="#[payload.LineID]" doc:name="Variable"/>
…
<set-payload value="lineData" doc:name="setPayloadToLines" />
<foreach doc:name="For Each" collection="#[payload.LineID]">
<db:insert config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (LINE_ID,ID) VALUES(LINE_SEQ.NEXTVAL,#[payload.LineID])]]></db:parameterized-query>
</db:insert>
</foreach>
由于您尚未显示完整的 json 请求,我们假设您有以下 json:-
{
"Industry": ["111","ggh","ooo",888],
"Phone": null,
"Id": null,
"type": "Account",
"Name": "Manufacturing"
}
下面是您如何提取每个逗号分隔值并将其插入数据库的方法:-
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="TestFlow" >
<http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
<logger level="INFO" doc:name="Logger" message="#[payload.Industry]"/>
<foreach doc:name="For Each" collection="#[payload.Industry]">
<logger message="Each extracted value :#[payload]" level="INFO" doc:name="Logger"/>
<!-- Your Database insert code here inserting each value with #[payload] -->
</foreach>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
您可以修改以上代码并将其用于插入数据库。
请注意 for loop #[payload]
内已提取逗号分隔值。您可以根据需要将其放入变量中并使用它而不是编写 #[payload]
更新:
根据你的问题,我更新了你的查询:-
<foreach doc:name="For Each" collection="#[payload.LineID]">
<db:insert config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID,LINE_ID) VALUES(LINE_SEQ.NEXTVAL,#[payload])]]></db:parameterized-query>
</db:insert>
添加了新代码,我试图首先保存 lineData,处理 header 并返回行,但是它不喜欢 setPayloadToLines
<set-variable variableName="lineData" value="#[payload.LineID]" doc:name="Variable"/>
…
<set-payload value="lineData" doc:name="setPayloadToLines" />
<foreach doc:name="For Each" collection="#[payload.LineID]">
<db:insert config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (LINE_ID,ID) VALUES(LINE_SEQ.NEXTVAL,#[payload.LineID])]]></db:parameterized-query>
</db:insert>
</foreach>
由于您尚未显示完整的 json 请求,我们假设您有以下 json:-
{
"Industry": ["111","ggh","ooo",888],
"Phone": null,
"Id": null,
"type": "Account",
"Name": "Manufacturing"
}
下面是您如何提取每个逗号分隔值并将其插入数据库的方法:-
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="TestFlow" >
<http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
<logger level="INFO" doc:name="Logger" message="#[payload.Industry]"/>
<foreach doc:name="For Each" collection="#[payload.Industry]">
<logger message="Each extracted value :#[payload]" level="INFO" doc:name="Logger"/>
<!-- Your Database insert code here inserting each value with #[payload] -->
</foreach>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
您可以修改以上代码并将其用于插入数据库。
请注意 for loop #[payload]
内已提取逗号分隔值。您可以根据需要将其放入变量中并使用它而不是编写 #[payload]
更新:
根据你的问题,我更新了你的查询:-
<foreach doc:name="For Each" collection="#[payload.LineID]">
<db:insert config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID,LINE_ID) VALUES(LINE_SEQ.NEXTVAL,#[payload])]]></db:parameterized-query>
</db:insert>