如何解决如果元素存在,则使用 Dataweave 将键添加到数组
我有一个 JSON 对象,其中包含主题 1、主题 2、主题 3 等字段,并以字符串数组作为值。
如果分配给字段 subject1、subject2、subject3 的字符串数组中存在任何搜索元素,那么我需要将 Json 对象中的键或该字段添加到现有数组 (myArray),
%dw 2.0
var myArray = [];
var subjects = {
"subject1" = ["sectionA","sectionB","sectionC"],"subject2" = ["sectionB","sectionD","sectionE"],"subject3" = ["sectionC","sectionF","sectionG"],}
fun getSubjects(section) = mapping mapObject ((value,key,index) ->
if(value contains key) myArray << key
else myArray
)
---
{
"subjects" : getSubjects(var.section) // var.section = sectionA
}
但我收到此错误“无法将数组强制转换为对象”。有没有更好的方法来做到这一点?
解决方法
我认为这就是你想要做的;因为数据在 dataweave 中是不可变的,如果您想在更改数组内容之类的内容的同时迭代集合,则必须使用诸如 reduce 之类的东西。
%dw 2.0
var subjects = {
"subject1": ["sectionA","sectionB","sectionC"],"subject2": ["sectionB","sectionD","sectionE"],"subject3": ["sectionC","sectionF","sectionG"]
}
var section = "sectionA"
fun getSubjects(section) = subjects pluck $$ reduce ((subject,myArray=[]) ->
if (subjects[subject] contains section) myArray << subject
else myArray
)
---
{
subjects: getSubjects(section)
}
产量:
{
subjects: [
"subject1"
]
}
,
还有一种方法可以做到这一点,如下所示,我们发送变量和需要匹配的字符串
%dw 2.0
var myArray = []
var subjects = {
"subject1" : ["sectionA","subject2" : ["sectionA","subject3" : ["sectionC","sectionG"],}
fun adding(inputarray,matchingkey)= flatten(inputarray mapObject ((value,key) ->
(("myArray"): (myArray ++ [key])) if ((value) contains matchingkey)
) pluck $)
---
adding(subjects,"sectionC")
输出为:
[
"subject1","subject3"
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。