В Dataweave какая разница между селектором .. и. *? - PullRequest
1 голос
/ 23 января 2020

Я вижу, что в документации написано

Multi-value  .*keyName  Array of values of any matching keys
Descendants  ..keyName  Array of values of any matching descendant keys

Но я до сих пор не понимаю различия.

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Multi-value возвращает массив всех вхождений ключа на текущем уровне вложенности объекта. Потомок возвращает Массив первого вхождения ключа на каждом уровне вложенности Объекта

Если у вас есть этот ввод:

{
    "id": 1,
    "id": 11,
    "secondLevel": {
        "id": 2,
        "id": 22,
        "thirdLevel": {
            "id": 3,
            "id": 33
        }
    }
}

И этот скрипт:

{ 
    "allTheId" : payload..*id, //all the ID
    "descendant": payload..id, //first occurrence of "id" in each level
    "multivalue": payload.*id, //all occurrence of "id" in the current level (the first level)
    "multivalueSecondLevel": payload.secondLevel.*id //all occurrence of "id" in the current level (the second level)
}

Это будет генерировать этот вывод:

{
  "allTheId": [
    1,
    11,
    2,
    22,
    3,
    33
  ],
  "descendant": [
    1,
    2,
    3
  ],
  "multivalue": [
    1,
    11
  ],
  "multivalueSecondLevel": [
    2,
    22
  ]
}

Подробнее в https://docs.mulesoft.com/mule-runtime/4.2/dataweave-cookbook-extract-data#descendants

1 голос
/ 23 января 2020

Я думаю, что это легко объяснить с помощью примеров, поэтому на основе этого вы получите следующие результаты:

payload.breakfast_menu.food -> First food element

payload.breakfast_menu.*food -> List of food elements

payload.breakfast_menu.*name -> Nothing

payload.breakfast_menu..name -> List of all product name values
...