[英]Issues in merging the xml response and json response in Dataweave
我有以下来自SOAP服务之一的xml响应:
<?xml version="1.0" encoding="UTF-8"?> <idc:document DocUrl="//abc.com:443/images/ywnj/mdi5/~edisp/test.jpg" dDocFormats="image/jpeg" dDocName="Test1" dDocTitle="Test1.jpg" dID="603" dName="sysadmin" dStatus="RELEASED" dUser="anonymous" xmlns:idc="//www.stellent.com/IdcService/"> <idc:field name="encodeDocUrl"/> <idc:field name="localizedForResponse">1</idc:field> <idc:field name="hasAnnotations">0</idc:field> <idc:field name="hasStickyNotes">0</idc:field> <idc:field name="dSubscriptionID">Test1</idc:field> <idc:field name="idcToken"/> <idc:resultset TotalRows="2" name="manifest"> <idc:row> <idc:field name="extRenditionName">indexData</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">48x48_GIF</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">180x180_GIF</idc:field> </idc:row> </idc:resultset> </idc:document> <idc:document DocUrl="//abc.com:443/images/ywnj/mdi5/~edisp/test23.jpg" dDocFormats="image/jpeg" dDocName="Test23" dDocTitle="Test23.jpg" dID="603" dName="sysadmin" dStatus="RELEASED" dUser="anonymous" xmlns:idc="//www.stellent.com/IdcService/"> <idc:field name="encodeDocUrl"/> <idc:field name="localizedForResponse">1</idc:field> <idc:field name="hasAnnotations">0</idc:field> <idc:field name="hasStickyNotes">0</idc:field> <idc:field name="dSubscriptionID">Test23</idc:field> <idc:field name="idcToken"/> <idc:resultset TotalRows="2" name="manifest"> <idc:row> <idc:field name="extRenditionName">indexData</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">90x90_GIF</idc:field> </idc:row> <idc:row> <idc:field name="extRenditionName">250x250_GIF</idc:field> </idc:row> </idc:resultset> </idc:document>
而且我从另一个REST服务获得以下json响应:
{ "results": [ { "ID": "1", "ImageID": "2", "Name": "Test1", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" }, { "ID": "2", "ImageID": "23", "Name": "Test23", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" } ] }
并且我想实现最终的json以下(仅当xml dDocName与JSON中的Name匹配时,才应映射来自soap响应的数据。)
{ "results": [ { "ID": "1", "ImageID": "2", "Name": "Test1", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" "links": [ { "rel": "indexData", "href": "/abc/indexData" }, { "rel": "48x48_GIF", "href": "/abc/48x48_GIF" }, { "rel": "180x180_GIF", "href": "/abc/180x180_GIF" } ] }, { "ID": "2", "ImageID": "23", "Name": "Test23", "Owner": "sysadmin", "Author": "sysadmin", "Creator": "sysadmin" "links": [ { "rel": "indexData", "href": "/abc/indexData" }, { "rel": "90x90_GIF", "href": "/abc/90x90_GIF" }, { "rel": "250x250_GIF", "href": "/abc/250x250_GIF" } ] } ] }
我尝试在dataweave中创建以下内容,但无法正常工作:
%dw 1.0 %output application/json --- { "packshots": (payload.searchResults pluck ({ "ID": $.xAH_StoreItemNumber, "ImageID": $.dID, "Name": $.dDocName, "Owner": $.dDocOwner, "Author": $.dDocAuthor, "Creator": $.dDocCreator, "links": (flowVars.renditionResp."idc:document"."idc:resultset"."idc:row" (filter $.dDocName == flowVars.CurrentName) map { "rel":$."idc:field".@extRenditionName, "href": "/abc" ++ $."idc:field".@extRenditionName }) })) }
您能帮我达到同样的效果吗!
谢谢 !!
我将假设您的XML具有一个名为idc:root
的根标记。 我首先要做的是按idc:dDocName
将XML分组。 这将允许您在需要时提取renditionResp
变量的正确部分。
然后,脚本的其余部分将如下所示:
%dw 1.0
%output application/json
%var docs = flowVars.renditionResp."idc:root" groupBy $."idc:dDocName"
---
{
"packshots": (payload.searchResults pluck ((value) -> {
"ID": value.xAH_StoreItemNumber,
"ImageID": value.dID,
"Name": value.dDocName,
"Owner": value.dDocOwner,
"Author": value.dDocAuthor,
"Creator": value.dDocCreator,
"links": docs[flowVars.CurrentName] map ((link) -> {
"rel": link."idc:field".@extRenditionName,
"href": "/abc" ++ link."idc:field".@extRenditionName
})
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.