关于vector.dev VLR中动态键遍历与数组元素修改的技术咨询
问题1:获取Meta中后缀为
.container.name的键值 针对meta块中前缀随机但后缀固定的键,可通过提取键数组+筛选匹配后缀的方式解决,规避硬编码键名的局限性:
// 将meta的所有键转为数组,筛选出以".container.name"结尾的键 target_keys = filter(map_keys(.meta), |key| ends_with(key, ".container.name")) // 取筛选后的第一个键(假设这类键唯一),从meta中取值赋值给.name .name = .meta[target_keys[0]]
逻辑说明:
map_keys(.meta):把meta对象的所有键转换为字符串数组,解决for_each要求输入数组的报错问题filter(..., ends_with(...)):精准过滤出符合后缀规则的目标键- 若存在多个匹配键,可遍历
target_keys数组批量处理,此处默认仅取第一个匹配值
问题2:批量删除Vulns数组中嵌套的
staticVar3并填充.name Vector的remap语言中for是保留关键字,不能直接使用,改用map遍历数组,结合map_values处理嵌套的随机键:
// 遍历vulns数组,逐个处理每个漏洞对象 .vulns = map(.vulns, |vuln| { // 处理staticVar下的所有随机键,批量删除每个键对应的staticVar3 cleaned_static_var = map_values(vuln.staticVar, |inner_obj| del(inner_obj, "staticVar3")) // 获取staticVar下的所有随机键,此处取第一个作为.name的值(可按需调整为拼接/其他逻辑) random_keys = map_keys(vuln.staticVar) new_name = random_keys[0] // 合并原对象、处理后的staticVar和新的name字段 merge(vuln, { staticVar: cleaned_static_var, name: new_name }) })
逻辑说明:
map(.vulns, ...):遍历vulns数组,对每个元素执行自定义处理逻辑map_values(vuln.staticVar, ...):遍历staticVar下的所有值(即各个randomVar对应的对象),批量删除staticVar3字段map_keys(vuln.staticVar):提取所有随机键名用于填充.name,若需要拼接多个键可使用join(random_keys, ",")
内容的提问来源于stack exchange,提问作者Kir
相关产品推荐
相关产品推荐

