如何在Rego中将键值对数组转换为KV格式对象?
如何将等号分隔的字符串数组转换为KV对象
你需要把由key=value格式字符串组成的数组转换成键值对对象,之前的尝试因类型不匹配(split返回的集合被识别为set[string],而sprintf要求array[any]类型输入)失败。以下是直接可行的实现方式:
基础实现(以Terraform HCL为例)
使用for表达式遍历数组,对每个字符串执行split分割后直接构建KV对象:
locals { input_array = [ "dev=devA", "instance=instanceA", "domain=domainA", "namespace=namespaceA", "service=serviceA" ] kv_object = { for str in local.input_array : split("=", str)[0] => split("=", str)[1] } }
这段代码会直接生成你需要的结果:
{ "dev" = "devA" "instance" = "instanceA" "domain" = "domainA" "namespace" = "namespaceA" "service" = "serviceA" }
容错优化版
如果数组中可能存在格式不正确的字符串(无等号或分割后长度不为2),可以添加条件过滤避免索引越界:
kv_object = { for str in local.input_array : split("=", str)[0] => split("=", str)[1] if length(split("=", str)) == 2 }
关于你之前的问题
你之前的写法中误用了split(str, "/")(应该是split(str, "=")),且不需要借助sprintf——直接通过for表达式分割字符串并映射键值,就能避免类型不匹配的问题。
内容的提问来源于stack exchange,提问作者raj ramalingam
相关产品推荐
相关产品推荐

