[英]Dataweave 1.0 ( Mule 3 ) contains not returning expected results while checking payload
所以我会收到一个带有 JSON 负载的发布请求。 我需要检查负载是否在负载中的任何位置包含关键字Moscow
(不是特定属性或字段)
示例负载:
{
"city": "Paris",
"zip": "123",
"street" : "some street name"
}
我不想检查有效载荷的各个属性,因为对Moscow
的这种检查也需要应用于具有不同有效载荷格式的其他端点......
所以我将输入有效负载转换为字符串:
<object-to-string-transformer doc:name="Object to string" />
然后我将转换组件用作:
<dw:transform-message doc:name="Transform">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
payload contains "Moscow"
}
当我在调试模式下运行并评估时,如果有效负载在任何地方包含“Moscow”,它表示为 True,但是当实际代码运行时它总是返回 false? (尝试做一个完全匹配,这样大写/小写就不会造成影响)
不确定我错过了什么?
edit1:完整脚本如下:
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
%var result1 = payload contains "Moscow"
%var result2 = payload.city contains "Moscow"
---
{
"isMoscow" : payload contains "Moscow",
"isMoscow" : result1 as :string,
"isMoscow" : result2
}]]></dw:set-payload>
</dw:transform-message>
所以现在即使我将有效负载发送为:
{
"city": "Moscow",
"zip": "123",
"street" : "some street name"
}
结果是:
{
"isMoscow": false,
"isMoscow": "false",
"isMoscow": true
}
请注意,只有当我明确比较payload.city
时才为真,而当我直接与 payload 比较时为 false
对于您共享的输入负载,结果是正确的。 payload.city contains "Moscow"
返回true
的事实意味着有效负载是 object,而不是字符串。 因此, contains
运算符不会为有效负载返回true
,因为它只适用于 arrays 或字符串。 可能 DataWeave 理解有效载荷是一个包含 JSON object 的字符串,并将其解析为 object。
因为输入是 JSON 字符串,所以您可以使用表达式write(payload,"application/json")
而不是payload
,所以它确实是一个字符串。
至于 object 到字符串的转换,您应该检查它是否多余,因为它似乎没有达到预期的结果,纯 DataWeave 方法可以替代它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.