You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:22:43