通过有效负载对象 v1 进行迭代?
Iterate via payload object v1?
正在努力做我想做的事,也许你可以帮助我。
我有一个包含不同数量项目的动态输出对象,我不知道键的名称,所以我只是像这样输出:
%dw 1.0
%Output application/json skipNullOn = "everywhere"
---
flowVars.OutputListArr orderBy $$
这适用于以下负载:
ccc="333", bbb="222", aaa="111", ddd="444"
但现在我有这样的情况,其中一个键是一个列表,但我想 return 它作为数组,例如
bbb = "221,222,223"
我可以做到
splitBy "," ->> "['221', '222', '223']"
但不知道如何一起做。
那么输入将是这样的:
{ccc="333",bbb="221,222,223",aaa="111", ddd="441, 442, 443"}
我想把它改造成:
"aaa": "111",
"bbb": ["221","222","223"],
"ccc": "333"
"ddd": "441, 442, 443",
所以只有 bbb 字符串被拆分(我知道 bbb 密钥名称)
upd:只是得到一种情况,然后 bbb 可能只有一个成员,所以期待一种方法来检查关键属性名称,然后使其成为数组...所以不属于它自己的内容
您可以使用递归函数来检查值的类型并对每个值应用正确的方法。此外,它会在对象上递归,以防存在嵌套对象。
示例:
%dw 1.0
%output application/json
%function filterKeys(o, k)
o mapObject
{
($$):
$ when ($ is :string and (k contains ($$ as :string)))
otherwise orderMembers($, k)
}
orderBy $$
%function splitString(s) s splitBy "," map trim $
%function orderMembers(x, k)
x match {
a is :array -> a orderBy $,
o is :object -> filterKeys(o, k),
s is :string -> orderMembers(splitString(s), k)
when s contains ',' otherwise s,
default -> $
}
%var testData={ccc:"333", ddd: ["555", "333", "222"], bbb: "223,221,222", eee: "456, 789, 123", aaa: 11}
---
orderMembers(testData, ["bbb"])
输出:
{
"aaa": 11,
"bbb": "223,221,222",
"ccc": "333",
"ddd": [
"222",
"333",
"555"
],
"eee": [
"123",
"456",
"789"
]
}
更新:添加了我们要保留的键的键列表,其他包含逗号的键将被拆分。请注意,我修剪了拆分的元素以避免多余的空间。如果不需要,您可以删除它。
正在努力做我想做的事,也许你可以帮助我。 我有一个包含不同数量项目的动态输出对象,我不知道键的名称,所以我只是像这样输出:
%dw 1.0
%Output application/json skipNullOn = "everywhere"
---
flowVars.OutputListArr orderBy $$
这适用于以下负载:
ccc="333", bbb="222", aaa="111", ddd="444"
但现在我有这样的情况,其中一个键是一个列表,但我想 return 它作为数组,例如
bbb = "221,222,223"
我可以做到
splitBy "," ->> "['221', '222', '223']"
但不知道如何一起做。 那么输入将是这样的:
{ccc="333",bbb="221,222,223",aaa="111", ddd="441, 442, 443"}
我想把它改造成:
"aaa": "111",
"bbb": ["221","222","223"],
"ccc": "333"
"ddd": "441, 442, 443",
所以只有 bbb 字符串被拆分(我知道 bbb 密钥名称)
upd:只是得到一种情况,然后 bbb 可能只有一个成员,所以期待一种方法来检查关键属性名称,然后使其成为数组...所以不属于它自己的内容
您可以使用递归函数来检查值的类型并对每个值应用正确的方法。此外,它会在对象上递归,以防存在嵌套对象。
示例:
%dw 1.0
%output application/json
%function filterKeys(o, k)
o mapObject
{
($$):
$ when ($ is :string and (k contains ($$ as :string)))
otherwise orderMembers($, k)
}
orderBy $$
%function splitString(s) s splitBy "," map trim $
%function orderMembers(x, k)
x match {
a is :array -> a orderBy $,
o is :object -> filterKeys(o, k),
s is :string -> orderMembers(splitString(s), k)
when s contains ',' otherwise s,
default -> $
}
%var testData={ccc:"333", ddd: ["555", "333", "222"], bbb: "223,221,222", eee: "456, 789, 123", aaa: 11}
---
orderMembers(testData, ["bbb"])
输出:
{
"aaa": 11,
"bbb": "223,221,222",
"ccc": "333",
"ddd": [
"222",
"333",
"555"
],
"eee": [
"123",
"456",
"789"
]
}
更新:添加了我们要保留的键的键列表,其他包含逗号的键将被拆分。请注意,我修剪了拆分的元素以避免多余的空间。如果不需要,您可以删除它。