Вы можете сделать это, рассматривая все поля как строки, однако учтите, что:
- Внутренние кавычки должны быть экранированы. В противном случае вывод не является допустимым JSON.
- Примите во внимание, что значение "package" также не является действительным JSON, если вы хотите его проанализировать. Это должен объект (например, "{\" package \ ": ...}")
- Этот скрипт ожидает, что все массивы имеют ровно 1 элемент. Больше элементов игнорируется, и меньшее может привести к ошибке. Это не очень надежная конструкция.
Сценарий (не рекомендуется):
%dw 2.0
output application/json
---
package: using (pc = payload.packageConfiguration[0]) (
" \"packageId\": \"$(pc.packageId[0])\", " ++
" \"component\": \"$(pc.component[0])\" " ++
" \"fieldName\": \"$(pc.fieldName[0])\" " ++
" \"assetUrl\": \"$(pc.assetUrl[0])\" "
)
Выход:
{
"package": " \"packageId\": \"AIM_PACKAGE\", \"component\": \"Handbook\" \"fieldName\": \"Upload Handbook Document\" \"assetUrl\": \"sflydamlocation.handbookfilename.pdf\" "
}
Это уродливая конкатенация строк. Вместо этого я бы предложил написать желаемый вывод в виде объекта JSON.
Сценарий (рекомендуется):
%dw 2.0
output application/dw
var pc = payload.packageConfiguration[0]
---
package:
write({
packageId: pc.packageId[0],
component: pc.component[0],
fieldName: pc.fieldName[0],
assetUrl: pc.assetUrl[0]
}, "application/json") replace /\n/ with ""
выход
{
"package": "{ \"packageId\": \"AIM_PACKAGE\", \"component\": \"Handbook\", \"fieldName\": \"Upload Handbook Document\", \"assetUrl\": \"sflydamlocation.handbookfilename.pdf\"}"
}
Второй сценарий намного чище, менее подвержен ошибкам и возвращает экранированный объект JSON, который вы можете удалить, чтобы использовать в качестве JSON.