如果特定值为空,则从复杂对象中删除对象

问题描述 投票:0回答:1

有人可以帮我解决下一个问题吗: 我需要根据下一个条件从有效负载中删除对象:如果某个特定键为空,我需要删除整个对象,其中包含有效负载中的该键和值。 示例:

{
   "issues":[
      {
         "key":"13996",
         "fields":{
            "customfield_13100":null,
            "customfield_15400":null,
            "customfield_13102":null,
            "customfield_13104":null,
            "customfield_12809":"",
            "lastViewed":null,
            "customfield_12000":[
               "870CA25F"
            ]
         }
      },
      {
         "key":"13996",
         "fields":{
            "customfield_13100":null,
            "customfield_15400":null,
            "customfield_13102":null,
            "customfield_13104":null,
            "customfield_12809":"",
            "lastViewed":null,
            "customfield_12000":null
         }
      },
      {
         "key":"13996",
         "fields":{
            "customfield_13100":null,
            "customfield_15400":null,
            "customfield_13102":null,
            "customfield_13104":null,
            "customfield_12809":"",
            "lastViewed":null,
            "customfield_12000":[
               "870CA25F"
            ]
         }
      }
   ]
}

我尝试了各种变体的filterObject,但没有成功

假设条件是:如果“customfield_12000”== null,则必须删除整个对象。 预期输出示例: `

{
   "issues":[
      {
         "key":"13996",
         "fields":{
            "customfield_13100":null,
            "customfield_15400":null,
            "customfield_13102":null,
            "customfield_13104":null,
            "customfield_12809":"",
            "lastViewed":null,
            "customfield_12000":[
               "870CA25F"
            ]
         }
      },
      {
         "key":"13996",
         "fields":{
            "customfield_13100":null,
            "customfield_15400":null,
            "customfield_13102":null,
            "customfield_13104":null,
            "customfield_12809":"",
            "lastViewed":null,
            "customfield_12000":[
               "870CA25F"
            ]
         }
      }
   ]
}
mule dataweave mulesoft
1个回答
0
投票

如果我理解正确的话,如果一个特定键为空,您想从

issues
列表中删除该项目。由于在示例中提供的密钥位于
fields
对象中,我假设条件都相似。

filterObject() 不合适,因为您正在过滤数组中的项目,而不是对象内的键值。 filter() 是过滤数组中项目的正确函数。

我使用了

update
运算符并创建了一个函数来封装 filter() 调用。动态选择器让我们可以对所使用的键进行参数化:

%dw 2.0
output application/json

fun removeIfNullField(a, fieldname, keyname)= 
        a filter ((item) -> !(item[fieldname][keyname] is Null ))

---
payload update {
    case issues at .issues -> removeIfNullField(issues, "fields","customfield_12000")
}
© www.soinside.com 2019 - 2024. All rights reserved.