【问题标题】:Mule 4/DW 2.0: Iterate array inside objects of arraysMule 4/DW 2.0:在数组对象内迭代数组
【发布时间】:2019-12-13 06:16:19
【问题描述】:

以下是示例输入 JSON: *

[
  {
    "animation_production_studios": [],
    "audio": [
      "English",
      "Japanese"
    ],
    "videos": [
      {
        "DASH": true,
        "aips": [
          400,
          824,
          1191
        ],
      },
      {
        "DASH": true,
        "aips": [
          401,
          825,
          1192
        ],
       }
]
 ]
  },
  {
    "animation_production_studios": ["Studio Chizu"],
    "audio": [
      "English",
      "Japanese"
    ],
    "videos": [
      {
        "DASH": true,
        "aips": [
          403,
          826,
          1193
        ],
      },
      {
        "DASH": true,
        "aips": [
          404,
          827,
          1194
        ],
       }
]
 ]
  }
]

*

这是预期的输出(能够插入到数据库中,如下所示):

animation_production_studios    audio           videos_dash  videos_aips
------------------------------------------------------------------------------------
Null                       English, Japanese    true         400, 824, 1191
Null                       English, Japanese    true         401, 825, 1192
Studio Chizu               English, Japanese    true         402, 826, 1193
Studio Chizu               English, Japanese    true         403, 827, 1194

这是我试过的 DW%2.0 代码:

payload map(item, index) -> {
   (item.videos map(viditem, vidindex)) -> {
        videos_aips: (viditem.videos map ((vitem, vindex) -> 
        vitem.aips reduce ((vi, vacc) -> vacc + vi )))[0],
        show_id: item."show_id",
        audio: (payload map ((aitem, aindex) -> item.audio                  
            reduce ((i, acc) -> acc ++ "," ++ i )))[0] 
   }
}

抛出错误:

(item.videos map(viditem, vidindex)) -> {
                        ^
Invalid input ',', expected ')' for the enclosed expression.

【问题讨论】:

  • 欢迎来到 SO!请向我们展示您已经尝试过的操作并说明您的问题。
  • 请检查您的示例 JSON 输入,因为它似乎无效。

标签: dataweave mulesoft


【解决方案1】:

请看下面

%dw 2.0
output application/json

var inputData = read('{
  "data": [
    {
      "animation_production_studios": [],
      "audio": [
        "English",
        "Japanese"
      ],
      "videos": [
        {
          "DASH": true,
          "aips": [
            400,
            824,
            1191
          ]
        },
        {
          "DASH": true,
          "aips": [
            401,
            825,
            1192
          ]
        }
      ]
    },
    {
      "animation_production_studios": [
        "Studio Chizu"
      ],
      "audio": [
        "English",
        "Japanese"
      ],
      "videos": [
        {
          "DASH": true,
          "aips": [
            403,
            826,
            1193
          ]
        },
        {
          "DASH": true,
          "aips": [
            404,
            827,
            1194
          ]
        }
      ]
    }
  ]
}', 'application/json')

fun concatArray(objArray=[], separator=",") = 
    if (sizeOf(objArray) == 0) 
        "Null"
    else
        objArray joinBy separator

---
flatten(inputData.data map(item) -> 
  item.videos map (vidItem) -> {
    "animation_production_studios" : concatArray(item.animation_production_studios, ","),
    "audio" : concatArray(item.audio, ","),
    "videos_aips" : concatArray(vidItem.aips, ","),
    "videos_dash" : vidItem.DASH
})

这将导致:

[
  {
    "animation_production_studios": "Null",
    "audio": "English,Japanese",
    "videos_aips": "400,824,1191",
    "videos_dash": true
  },
  {
    "animation_production_studios": "Null",
    "audio": "English,Japanese",
    "videos_aips": "401,825,1192",
    "videos_dash": true
  },
  {
    "animation_production_studios": "Studio Chizu",
    "audio": "English,Japanese",
    "videos_aips": "403,826,1193",
    "videos_dash": true
  },
  {
    "animation_production_studios": "Studio Chizu",
    "audio": "English,Japanese",
    "videos_aips": "404,827,1194",
    "videos_dash": true
  }
]

请注意,我已尝试更正您的输入以使其有效并放在“数据”下。这里的想法是,您将通过 map 进行外循环(遍历父数组)并进行内循环(遍历视频)。可能有一种更有效的方法可以将两个循环组合为一个循环。如果有什么我会更新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2021-04-28
    • 2014-07-11
    • 2017-03-29
    相关资源
    最近更新 更多