mule - 动态查找后向 JSON 数组添加新项目
问题描述
下面给出了我的示例有效负载。
{
"Identifier": "1111111111",
"Type": "Test",
"Codes": [
{
"CodeId": "112233-ABC",
"Code": {
"ID": "112233",
"Name": "ABC"
}
},
{
"CodeId": "445566-DEF",
"Code": {
"ID": "445566",
"Name": "DEF"
}
},
{
"CodeId": "778899-GHI",
"Code": {
"ID": "778899",
"Name": "GHI"
}
}
]
}
我有 2 个会话变量,如下所示:
%var var1 =
{
"112233": "900123",
"445566": "900456",
"778899": "900789"
}
%var var2 =
{
"value": [
{
"Desc": "Alpha",
"TempId": 900123
},
{
"Desc": "Bravo",
"TempId": 900456
},
{
"Desc": "Charlie",
"TempId": 900789
}
]
}
我需要对这两个变量进行动态查找并将新属性添加到主有效负载,如下所示:
{
"Identifier": "1111111111",
"Type": "Test",
"Codes": [
{
"CodeId": "112233-ABC",
"Code": {
"ID": "112233",
"Name": "ABC",
"Description": "Alpha"
}
},
{
"CodeId": "445566-DEF",
"Code": {
"ID": "445566",
"Name": "DEF",
"Description": "Bravo"
}
},
{
"CodeId": "778899-GHI",
"Code": {
"ID": "778899",
"Name": "GHI",
"Description": "Charlie"
}
}
]
}
这个想法是使用var1 中的值对 var2 中的TempId执行查找并获取Desc。这必须通过与 ID 匹配来添加到代码数组中。如果没有找到值,则插入 null。我在 dataweave 1.0
提前致谢
解决方案
你可以试试下面的脚本。有两个查找,第一个是 fromvar
获取TempId
然后第二个是添加Desc
字段
%dw 1.0
%input payload application/json
%output application/json
%var var1 =
{
"112233": "900123",
"445566": "900456",
"778899": "900789"
}
%var var2 =
{
"value": [
{
"Desc": "Alpha",
"TempId": 900123
},
{
"Desc": "Bravo",
"TempId": 900456
},
{
"Desc": "Charlie",
"TempId": 900789
}
]
}
%var var2Grouped = var2.value groupBy $.TempId
%function addDesc(id) var2Grouped[var1[id]][0].Desc default {}
---
{
Identifier: payload.'Identifier',
'Type': payload.'Type',
"Codes": payload."Codes" map ((code) -> {
CodeId: code.CodeId,
Code: code.Code ++ addDesc(code.Code.ID)
})
}
推荐阅读
- wordpress - 如何在 wordpress api 中显示原始 json 字符串
- sql - 组织产品数据库所需的建议
- javascript - 尝试使用three.js时“未捕获的语法错误:无法在模块外使用导入语句”
- git - 手动将项目从 Team Foundation Server 2015 移动到 Azure DevOps TFVC 或 Git
- python-3.x - 矩保持阈值:三级案例
- javascript - 如果父组件没有传递一个 ref,您是否可以为元素分配一个 ref?
- javascript - 在 JS/TS 中使用 DOB 计算年龄
- python - Python 3.6.3 Jupyter Notebook: ModuleNotFoundError: No module named 'geopandas' --> Pip Install & Conda both didn't work
- javascript - 构建 bash 命令时如何防止注入攻击?
- python - 如何将项目从最大值到最小值(python)