问题描述
我的Json有效负载是
[
{
"Customer Contacted": "Rupesh","Inspected": "Mahesh","Lost": "Fire","Job Start Date": "","Work Complete": "","Billing Complete": ""
}
]
我的XML是
%dw 2.0
output application/xml
---
{
root: {
CustomerContacted: if(payload."Customer Contacted"=="Rupesh") "Hari"
else null,Inspected: if(payload."Inspected"=="Mahesh")"vamsi"
else null,Lost: payload.Lost,JobStartDate: payload."Job Start Date",WorkComplete: payload."Work Complete",BillingComplete: payload."Billing Complete"
}
}
如果这些值与“有效负载”中的值和“条件”中提供的值匹配,则应更改该值。 转换后,我的输出低于输出。
<?xml version='1.0' encoding='UTF-8'?>
<root>
<CustomerContacted/>
<Inspected/>
<Lost>Fire</Lost>
<JobStartDate></JobStartDate>
<WorkComplete></WorkComplete>
<BillingComplete></BillingComplete>
</root>
我在“与客户联系”和“已检查”字段中得到的值为空,但是我期望“ Rupesh”和“ Mahesh”的值为“ Hari”和“ Vamsi”
请让我知道需要在XML代码中进行哪些更改。
解决方法
有效负载是一个数组,要将元素与字符串匹配,需要定义索引。例如,在您的Payoad上,Customer Contacted
是对象的一部分,而有效负载类型是数组。
语法应为:
if(payload."Customer Contacted"[0] == "Rupesh") "Hari"
else null
示例:
%dw 2.0
output application/xml
---
{
root: {
CustomerContacted: if(payload."Customer Contacted"[0] == "Rupesh") "Hari"
else null,Inspected: if(payload."Inspected"[0]=="Mahesh")"vamsi"
else null,Lost: payload.Lost[0],JobStartDate: payload."Job Start Date"[0],WorkComplete: payload."Work Complete"[0],BillingComplete: payload."Billing Complete"[0]
}
}
,
由于您的输入是一个数组,因此需要对其进行迭代以获取值或使用数组符号[0]对索引进行硬编码。我建议使用map
函数,因为如果得到的输入数组的大小大于1,则硬编码索引是不可扩展的。在这种情况下,应执行以下操作:
%dw 2.0
output application/xml
---
root: {
subroot: payload map {
CustomerContacted: if($."Customer Contacted"=="Rupesh") "Hari" else null,Inspected: if($."Inspected"=="Mahesh") "vamsi" else null,Lost: $.Lost,JobStartDate: $."Job Start Date",WorkComplete: $."Work Complete",BillingComplete: $."Billing Complete"
}
}
注意:如果输入数组中有多个项目,则需要输出subroot
字段,否则将产生错误:Trying to output second root
,因为这将导致无效的xml结构。