【问题标题】:How convert json object to lower case in dataweave 1.0?如何在 dataweave 1.0 中将 json 对象转换为小写?
【发布时间】:2020-08-27 16:02:04
【问题描述】:

您好,我有一个 json 文件作为有效负载,并且正在努力将转换为小写的元素及其值。

{
 "Name" : "John".
 "e-mails" : ['Email1@mail.com','email2@Gmail.com']
}

如果它的值中没有数组,那么这个可以像 where 一样正常工作

但是如何处理数组呢?

预期输出:

{
 "name" : "john".
 "e-mails" : ['email1@mail.com','email2@gmail.com']
}

有什么建议吗?

【问题讨论】:

    标签: mule mule-studio dataweave mulesoft mule-esb


    【解决方案1】:

    您需要使用递归函数来覆盖其他类型。

    %dw 1.0
    %output application/json
    %function lowerAll(x)
            x match {
              :object ->  $ mapObject {
                    (lower $$): lowerAll($) // assumes all keys are strings
              },   
              :array  ->  $ map lowerAll($),
              :string -> lower $,
              default  ->  $
            }  
    ---
    lowerAll(payload)
    

    输入:

    {
     "Name" : "John",
     "e-mails" : ["E1mail1@mail.com","email2@Gmail.com"]
    }
    

    输出:

    {
      "name": "john",
      "e-mails": [
        "e1mail1@mail.com",
        "email2@gmail.com"
      ]
    }
    

    【讨论】:

    • 应该是:默认 -> 小写 $ 所以关键属性名称也是小写
    • lower 仅为字符串定义,这些字符串已包含在其中一个匹配项中,因此将其添加到默认值可能会导致其他类型的错误。
    • DataWeave 1 中的 lower 运算符只接受字符串参数。这已被分支:string -> lower $, 捕获。键被对象分支捕获,我在键(lowerAll ($$)): 中递归地使用lowerAll。将其添加到默认值可能会导致错误,因为其他分支确保默认值不会收到字符串。
    • 我做了一个额外的测试,你是对的。键以 :key 的形式出现,因此它们不会被 :string 分支缓存,但是尝试添加 :key 匹配会给我一个错误。我不知道如何解决这个问题。对于日期,向字符串分支添加条件,或提出新问题。
    • 我更新了解决方案,将密钥作为特殊情况处理。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多