首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DWL1.0替换数组中的特定值

使用DWL1.0替换数组中的特定值
EN

Stack Overflow用户
提问于 2019-07-03 01:28:10
回答 1查看 948关注 0票数 0

正确使用mapObject函数的问题。尝试保留现有数组结构,但计算车辆和属性的数量,并更新包含该值的现有数组。一般数据来自一个源,车辆数据来自另一个源,属性数据来自另一个源。因此,在合并时,我必须使用其他源数据的计数来更新一般数据。通用也是一个数组对象,它总是有1,所以使用GENERAL是安全和良好的。

原始有效载荷

代码语言:javascript
复制
[
  {
    "commId": "1",
    "GENERAL": [
      {
        "ID": "G1",
        "VEHICLE_COUNT": "TODO",
        "PROPERTY_COUNT": "TODO"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V1-1"
      },
      {
        "ID": "V1-2"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P1-1"
      }
    ]
  },
  {
    "commId": "2",
    "GENERAL": [
      {
        "ID": "G2",
        "VEHICLE_COUNT": "TODO",
        "PROPERTY_COUNT": "TODO"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V2-1"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P2-1"
      },
      {
        "ID": "P2-2"
      }
    ]
  },
  {
    "commId": "3",
    "GENERAL": [
      {
        "ID": "G3",
        "VEHICLE_COUNT": "TODO",
        "PROPERTY_COUNT": "TODO"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V3-1"
      },
      {
        "ID": "V3-2"
      },
      {
        "ID": "V3-3"
      }
    ]
  }
]

尝试使用map循环遍历有效负载,并尝试修改2属性,但只能映射一个属性,但即使这样做也显示出了错误的输出。

代码语言:javascript
复制
test map (item, index) -> {
    (item.GENERAL[0] mapObject (value, key) -> { 
        (key): (value == sizeOf (item.VEHICLE)
                when (key as :string) == "VEHICLE_COUNT" 
                otherwise value)
    })
}

预期产出:

代码语言:javascript
复制
[
  {
    "commId": "1",
    "GENERAL": [
      {
        "ID": "G1",
        "VEHICLE_COUNT": "2",
        "PROPERTY_COUNT": "1"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V1-1"
      },
      {
        "ID": "V1-2"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P1-1"
      }
    ]
  },
  {
    "commId": "2",
    "GENERAL": [
      {
        "ID": "G2",
        "VEHICLE_COUNT": "1",
        "PROPERTY_COUNT": "2"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V2-1"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P2-1"
      },
      {
        "ID": "P2-2"
      }
    ]
  },
  {
    "commId": "3",
    "GENERAL": [
      {
        "ID": "G3",
        "VEHICLE_COUNT": "3",
        "PROPERTY_COUNT": "0"
      }
    ],
    "VEHICLE": [
      {
        "ID": "V3-1"
      },
      {
        "ID": "V3-2"
      },
      {
        "ID": "V3-3"
      }
    ]
  }
]

到目前为止,完全错误的输出:

代码语言:javascript
复制
[
  {
    "ID": "G1",
    "VEHICLE_COUNT": false,
    "PROPERTY_COUNT": "TODO"
  },
  {
    "ID": "G2",
    "VEHICLE_COUNT": false,
    "PROPERTY_COUNT": "TODO"
  },
  {
    "ID": "G3",
    "VEHICLE_COUNT": false,
    "PROPERTY_COUNT": "TODO"
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 03:43:59

编辑:动态转换的更新

下面的数据编织转换不是特别有吸引力,但它可能对您有用。

感谢克里斯蒂安?奇巴纳通过回答以下问题来帮助我找到一个动态答案:Why does Mule DataWeave array map strip top level objects?

代码语言:javascript
复制
%dw 1.0
%output application/json
---
payload map ((item) -> 
    (item - "GENERAL") ++
    GENERAL: item.GENERAL map (
        $ - "VEHICLE_COUNT"
          - "PROPERTY_COUNT"
          ++ { VEHICLE_COUNT: sizeOf (item.VEHICLE default []) }
          ++ { PROPERTY_COUNT: sizeOf (item.PROPERTY default []) }
    )
)

它是动态的,所以当它进来时,所有东西都应该被复制,只有你想要更新的两个字段。

此转换与您提供的输入的输出如下。与您期望的唯一不同是,计数是以数字而不是字符串的形式显示的。如果您真的需要它们作为字符串,您可以像(sizeOf (comm.VEHICLE default [])) as :string,那样转换它们

代码语言:javascript
复制
[
  {
    "commId": "1",
    "VEHICLE": [
      {
        "ID": "V1-1"
      },
      {
        "ID": "V1-2"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P1-1"
      }
    ],
    "GENERAL": [
      {
        "ID": "G1",
        "VEHICLE_COUNT": 2,
        "PROPERTY_COUNT": 1
      }
    ]
  },
  {
    "commId": "2",
    "VEHICLE": [
      {
        "ID": "V2-1"
      }
    ],
    "PROPERTY": [
      {
        "ID": "P2-1"
      },
      {
        "ID": "P2-2"
      }
    ],
    "GENERAL": [
      {
        "ID": "G2",
        "VEHICLE_COUNT": 1,
        "PROPERTY_COUNT": 2
      }
    ]
  },
  {
    "commId": "3",
    "VEHICLE": [
      {
        "ID": "V3-1"
      },
      {
        "ID": "V3-2"
      },
      {
        "ID": "V3-3"
      }
    ],
    "GENERAL": [
      {
        "ID": "G3",
        "VEHICLE_COUNT": 3,
        "PROPERTY_COUNT": 0
      }
    ]
  }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56861785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档