m子JSON-如何将钥匙值对转换为列表



我有一个JSON有效负载,其格式:

{"key":"value",
 "key:1":"value",
 "key:2","value",
 "junk key":"value",
 "part":"value",
 "part:1","value", 
 "part:2","value"...}

想将其转换为:

{"1":{
   "key":"value",
   "part":"value"
   },
 "2": {
   "key":"value",
   "part":"value"
   },
 "3": {
   "key":"value",
   "part":"value"
   }
}

有什么想法?

这是我可以使用dataweave获得的壁橱输出,只需使用MEL或简单的Java代码在后续消息处理器中删除其他卷发括号的格式即可。希望它有帮助!

输入JSON {
"键":" value1", "键:1":" value2", "键:2":" value3", "垃圾键":" value4", " part":" value5", "零件:1":" value6", "零件:2":" value7"}

dataweave逻辑:

%dw 1.0
%output application/json
%var keyValues = payload mapObject {
    ('$$' : $)when ( '$$' matches /key(:d)?/)
}
%var partValues = payload mapObject {
    ('$$' : $)when ( '$$' matches /part(:d)?/)
}
%var zipValues = (keyValues zip partValues) map {
    '$$': {
        key: $[0],
        part: $[1]
    }
}
---
zipValues map {
    '$$' : $[0]
}

结果

[
  {
    "0": {
      "key": "value1",
      "part": "value5"
    }
  },
  {
    "1": {
      "key": "value2",
      "part": "value6"
    }
  },
  {
    "2": {
      "key": "value3",
      "part": "value7"
    }
  }
]

Senthil已经有一个工作解决方案,但是这里有一个通用解决方案,用于任何包含结肠的键:

%dw 1.0
%output application/json
%function parseKeys(o) o pluck { 
    key: $$ replace /(w+)(:w+)?/ with $[1],
    group: $$ match {
        /(w+):(w+)/ -> $[2],
        default -> null
    },
    value: $
}
%function toNiceObject(tuples) {(tuples map {($.key): $.value})}
---
parseKeys(payload)
filter ($.group != null)
groupBy $.group
mapObject (
    '$$': toNiceObject($)
)

我认为最好首先分解键(parseKeys函数),生成具有keygroupvalue字段的一系列对象。然后,我们可以filtergroupBy中间数据结构,然后将其转回末端的结果对象(toNiceObject)。

要注意的另一件事是使用pluckmatch使parseKeys起作用。Pluck采用一个对象并通过将给定功能应用于对象中的每个键值对(元组)来产生数组。匹配使我们能够根据某些标准将不同的转换应用于给定输入,在这种情况下是正则表达式。

最新更新