【问题标题】:Fetching key:value pair from array object in mule4从 mule4 中的数组对象获取键:值对
【发布时间】:2020-05-14 04:46:10
【问题描述】:

我想从 json 数组对象中检索键值对。我正在尝试使用输入构建一个动态的 where 子句。如果数组中的键值相同,那么我想将它与“IN”运算符一起使用,否则我想使用“AND”。用两个例子解释这两种情况

输入1:

"values": [
{
  "id": "123"
},
{
  "id": "455"
}

]

预期输出:

**"Where id in ('123','455')"**

输入2:

"values": [
{
  "id": "123"
},
{
  "name": "abc"
}

]

预期输出:

**"Where id = '123' and name = 'abc'**

提前致谢

【问题讨论】:

    标签: json mule dataweave


    【解决方案1】:

    这应该会让你走上正确的道路。

    %dw 2.0
    import * from dw::core::Arrays
    output application/json
    
    var values = 
        [
            {
                "id": "123"
            },
            {
                "id": "abc"
            }
        ]
    
    ---
    
    if ( (values countBy ($.id != null)) > 1 )
        "in"
    else if ( (values countBy ($.id != null)) == 1 )
        "and"
    else
        "idk"
    

    【讨论】:

      【解决方案2】:

      Christian 的方法,使用键集

      %dw 2.0
      import * from dw::core::Objects
      import * from dw::core::Arrays
      output application/json
      var firstKey = keySet(payload.values[0])[0]
      var sameKeys = payload.values every ((item) -> keySet(item)[0] == firstKey)
      ---
      if (sameKeys) 
          "Where " ++ firstKey ++ " in ('" ++ (payload.values[firstKey] joinBy "','") ++ "')" 
      else 
          "Where " ++ (payload.values map ((item, index) -> keysOf(item)[0] ++ " = '" ++ valuesOf(item)[0] ++ "'") joinBy  " and ")
      

      【讨论】:

        【解决方案3】:

        检查所有键是否相同以区分大小写。

        您可以将 joinBy 函数与 "','"" and " 一起使用来分隔值。

        %dw 2.0
        import * from dw::core::Arrays
        output application/json
        var firstKey = keysOf(payload.values[0])[0]
        var sameKeys = payload.values every ((item) -> keysOf(item)[0] == firstKey)
        ---
        if (sameKeys) 
            "Where " ++ firstKey ++ " in ('" ++ (payload.values[firstKey] joinBy "','") ++ "')" 
        else 
            "Where " ++ (payload.values map ((item, index) -> keysOf(item)[0] ++ " = '" ++ valuesOf(item)[0] ++ "'") joinBy  " and ")
        

        【讨论】:

        • keysOf 我猜是在 dataweave 2.3 中引入的。我正在使用以前的版本。关于我可以用什么代替它的任何建议?我尝试使用 keySet,但即使这样似乎也不起作用。
        • 我已经使用 keySet 更新了 Christian 的方法,并在下面作为答案发布。 HTH..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        相关资源
        最近更新 更多