Dataweave проверяет, содержится ли значение в списке YAML - PullRequest
1 голос
/ 04 октября 2019

Я хочу проверить, присутствует ли значение в списке YAML.

У меня есть product.yaml

intGrp:
  - "A"
  - "CD"
  - "EF"
  - "ABC"
  - "CDEF"

Из сообщения преобразования я хочу проверить

If (intGrp contains payload.myvalue) this else that

Пробовал

%dw 2.0
var prop = Mule::p('intGrp')
output application/json
---
{
    a: prop contains ("A")
}

Но это не решает мою проблему. Потому что я хочу сделать точное совпадение строк. то есть, если я даю a: prop contains ("AB"), я должен получить ложь, так как нет продукта как «AB».

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 06 октября 2019

Проблема в том, что массив YAML интерпретируется как разделенная запятыми строка в свойстве. Функция Содержит () работает в строках иначе, чем в массиве. В строках он ищет подходящую подстроку, поэтому 'AB' возвращает true. Вы можете преобразовать строку обратно в массив, используя функцию DataBeave splitBy (). Я показываю обе стороны, чтобы подчеркнуть разницу:

%dw 2.0
var prop = Mule::p('intGrp') 
var propArray = Mule::p('intGrp') splitBy ',' 
output application/json
---
{
    raw: prop,
    array: propArray,
    a: propArray contains ("A"),
    ab: propArray contains ("AB")
}

Вывод:

{
  "raw": "A,CD,EF,ABC,CDEF",
  "array": [
    "A",
    "CD",
    "EF",
    "ABC",
    "CDEF"
  ],
  "a": true,
  "ab": false
}

Обратите внимание, что если какая-либо из записей содержит запятую, она тоже будет разделена.

...