json - JSON数组使用mule dataweave成行
问题描述
我有以下要求。
输入是
{ "packageConfiguration": [
{
"packageId": [
"AIM_PACKAGE"
],
"component": [
"Handbook"
],
"fieldName": [
"Upload Handbook Document"
],
"assetUrl": [
"sflydamlocation.handbookfilename.pdf"
]
}
]}
我需要将上面的 json 数组转换成这种输出格式:
{
"pakage": ""packageId":"AIM_PACKAGE", "component":"Handbook", "fieldName":"Upload Handbook Document","assetUrl":"sflydamlocation.handbookfilename.pdf""
}
解决方案
您可以将所有字段视为字符串,但请注意:
- 必须对内部引号进行转义。否则输出不是有效的 JSON。
- 考虑到“包”的值也不是真正有效的 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。
推荐阅读
- css - 内联块中的绝对位置
- nginx - Terraform 未在 AWS 上启动 nginx 服务器
- android - Dailymotion通过密码访问私人视频
- reactjs - When Table ellipsis attr is assigned `true` will show black text box. How can I change styled for textbox background color?
- react-native-firebase - 如何禁用后台状态通知?
- docker - 执行到 docker 重启容器
- c# - 如何使用字符串动态构建 Lambda 表达式
- flutter - 初始化时只能访问静态成员
- c# - 无法使用 DocuSign 管理 API [docusignapi] 更新用户个人资料
- php - 在 Laravel 6+ 中的 insert() 函数之后检索批量插入的 id