【问题标题】:display nested collection using dataweave使用 dataweave 显示嵌套集合
【发布时间】:2017-02-11 18:15:19
【问题描述】:

我想显示以下输出(json),输入来自 pl/sql 游标, 我的问题:

  1. 如何显示这个输出?
  2. 需要什么样的输入才能获得此输出?
  3. 如何使用personId键合并2个游标结果?

谢谢

输入:

personCursor: 
[{personName=a,personId=1}, {personName=b,personId=2}]
*contactCursor*
[{personId=1, firstName==x, phone=123}, {personId=1, firstName==y, phone=234}, {personId=2, firstName==z, phone=345},{personId=2, firstName==w, phone=456}]
**output:**
[
  {
    "personName": "a",
    "personId": "1",
    "contacts": 
            [
                {
                    "firstname": "x",
                    "phone": 123
                },
                {
                    "firstname": "y",
                    "phone": 234
                },
            ]
  },
 {
    "personName": "b",
    "personId": "2",
    "contacts": 
            [
                {
                    "firstname": "z",
                    "phone": 345
                },
                {
                    "lastname": "w",
                    "phone": 456
                },
            ]
  }
]

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    要获得输出,您必须使用类似的脚本

    %dw 1.0
    %output application/json
    %var contactLookup = payload groupBy $.personId
    ---
    flowVars.PersonCursor map {
        ($),
        contacts : contactLookup[$.personId]
    }
    

    其中有效载荷是contactCursorflowVars.PersonCursorpersonCursor。给定的代码将使用 Hashmap 查找组合数据。如果是 pl/sql 光标,输入将是 java。

    HTH

    【讨论】:

    • contactCursor 和 flowVars.PersonCursor 的数据类型是什么?我将两者都设置为 json,它仅适用于 1st PersonCursor 记录,得到以下输出: { "output": [ { "personName": "a", "personId": 1, "contacts": [ { "personId": 1 , "firstName": "x", "phone": 123 }, { "personId": 1, "firstName": "y", "phone": 234 } ] }, { "personName": "b", " personId": 2, "联系人": null } ] }
    • Json 和 java 都可以。但是,如果您作为迭代器收到响应,请将代码更改为 %var contactLookup = payload map $ groupBy $.personId
    【解决方案2】:

    另一种方法是,您可以使用 2 个映射运算符并循环遍历数组并构造输出 Json 以及过滤条件以将联系人与正确的人相关联。 应该是以下几行:

    PersonCursor map(v1,i1) {
       personName": $.personName,
        "personId": $.personId,
        contacts : contactCursor map {
    "firstname": $.firstname,
    "phone": $.phone
               } filter $.personId == v1.personId
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多