Обработка значений в dataweave mule4

#dataweave #mule4

#dataweave #mule4

Вопрос:

я пытаюсь сопоставить значения в приведенной ниже полезной нагрузке.

     result = {
        "drives": [{
            "id": "0AC_FdkeL63mHUk9PVA",
            "name": "QA"
        }, {
            "id": "0AC_Ype39GAOpUk9PVA",
            "name": "Salesforce.com"
        }, {
            "id": "0AA9MLlEbuhRfUk9PVA",
            "name": "UAT-zz-SFJobs-2020-10"
        }]
    }
  

Я использую приведенный ниже код, чтобы проверить, соответствует ли значение Salesforce.com присутствует там и верните его.
используя приведенный ниже код

 %dw 2.0
output application/json
---
payload.result.drives filter ((item, index) -> item.name == "Salesforce.com")
  

Это выдает мне ошибку, как я могу этого добиться

Ожидаемый результат:

 "drives": [{
            "id": "0AC_Ype39GAOpUk9PVA",
            "name": "Salesforce.com"
        } ]
  

Комментарии:

1. Привет, Дэниел! Не могли бы вы предоставить более подробную информацию об ошибке, которую вы получаете? Спасибо.

2. Ваш ввод, похоже, представляет собой смесь Java и JSON. Вероятная ошибка, которую вы получаете, заключается в том, что она пытается считываться как JSON, но неправильно отформатирована.

Ответ №1:

Работает для меня. Вам необходимо создать drives атрибут для ответа, чтобы он соответствовал ожидаемому результату.

Обратите внимание, что ввод не является допустимым JSON. Это может быть причиной ошибки.

 %dw 2.0
output application/json
---
{ 
    drives: payload.result.drives filter ((item, index) -> item.name == "Salesforce.com") 
}
  

Вывод:

 {
  "drives": [
    {
      "id": "0AC_Ype39GAOpUk9PVA",
      "name": "Salesforce.com"
    }
  ]
}
  

Ввод (скорректированный):

 { 
    "result" : {
        "drives": [{
            "id": "0AC_FdkeL63mHUk9PVA",
            "name": "QA"
        }, {
            "id": "0AC_Ype39GAOpUk9PVA",
            "name": "Salesforce.com"
        }, {
            "id": "0AA9MLlEbuhRfUk9PVA",
            "name": "UAT-zz-SFJobs-2020-10"
        }]
    }
}
  

Ответ №2:

Попробуйте это: всякий раз, когда вы сталкиваетесь с массивом объектов, вы можете фильтровать на основе значения определенного ключа. Здесь имя является ключом и равно «Salesforce.com «. Таким образом, объекты с другими именами будут отфильтрованы.

 %dw 2.0
output application/json
var result = {
        "drives": [{
            "id": "0AC_FdkeL63mHUk9PVA",
            "name": "QA"
        }, {
            "id": "0AC_Ype39GAOpUk9PVA",
            "name": "Salesforce.com"
        }, {
            "id": "0AA9MLlEbuhRfUk9PVA",
            "name": "UAT-zz-SFJobs-2020-10"
        }]
    }
---
{
    drives: result.drives filter ((item, index) -> item.name == "Salesforce.com")
}