繁体   English   中英

Dataweave 1.0 ( Mule 3 ) 在检查负载时不返回预期结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM