使用 Dataweave 将数组转换为对象内的字符串

Convert an array to string inside an object using Dataweave

我有一个对象负载,其中一个键值对是对象内部的一个数组。如何将该键值对转换为字符串。

输入:

{
   "key1":{
      "sk1":"abc",
      "sk2":12,
      "key2":[
         "aa",
         "bbb",
         "ccc",
         "ddd"
      ]
   }
}

预期输出:

{
   "key1": "sk1: abc, sk2:12, key2: aa,bbb,ccc,ddd"
}

提前致谢

通常这种问题是通过将递归函数与按类型进行模式匹配相结合来解决的。

%dw 2.0
output application/json
fun printObject(x) =
    x  match {
            case is String  ->  x
            case is Number -> x as String
            case is Object ->
                x mapObject ((value, key, index) -> (key): printObject(value)  ) 
                pluck ((value, key, index) -> key as String ++ ":" ++ value)
                joinBy(",")
            case is Array -> (x map printObject($)) joinBy(",")
            else -> x
    }
---
payload mapObject ($$): printObject($)

输出:

{
  "key1": "sk1:abc,sk2:12,key2:aa,bbb,ccc,ddd"
}

这是我快速想出的东西

%dw 2.0
output application/json
var keys=payload.key1 pluck $$
var values=payload.key1 pluck $
fun returnVal(key_index) =  
values[key_index] 
---
key1:(keys map(v0,k0) -> (v0 as String ++ ':' ++ if(typeOf(returnVal(k0)) ~= 'Array') (returnVal(k0) joinBy  ',') else returnVal(k0)  ) ) joinBy  ','