如何使用DataWeave将给定JSON转换为指定输出结构?
DataWeave JSON字段替换实现方案
前置说明
以下实现基于符合你描述的JSON结构,先给出示例输入供参考:
{ "editable": true, "sections": [ { "title": "用户基础信息", "Content": [ { "apiname": "userName", "text": { "userName": "李小明", "userAge": 32, "userPhone": "138xxxx1234" } }, { "apiname": "userAge", "text": { "userName": "李小明", "userAge": 32, "userPhone": "138xxxx1234" } } ] }, { "title": "用户联系信息", "Content": [ { "apiname": "userPhone", "text": { "userName": "李小明", "userAge": 32, "userPhone": "138xxxx1234" } } ] } ] }
转换代码(DataWeave 2.0)
%dw 2.0 output application/json --- { editable: payload.editable, sections: payload.sections map (sectionItem) -> { title: sectionItem.title, Content: sectionItem.Content map (contentItem) -> { (contentItem - "text"), text: contentItem.text[contentItem.apiname] } } }
转换后输出示例
{ "editable": true, "sections": [ { "title": "用户基础信息", "Content": [ { "apiname": "userName", "text": "李小明" }, { "apiname": "userAge", "text": 32 } ] }, { "title": "用户联系信息", "Content": [ { "apiname": "userPhone", "text": "138xxxx1234" } ] } ] }
扩展说明
- 代码默认保留
Content数组对象中除text外的所有原有字段,无需额外适配新增字段 - 如果
apiname对应的属性在text对象中不存在,转换后text字段会返回null,可通过text: contentItem.text[contentItem.apiname] default "自定义默认值"设置兜底值 - 代码兼容所有Mule 4.x版本的DataWeave运行环境
内容的提问来源于stack exchange,提问作者SH4444KO
相关产品推荐
相关产品推荐

