jsonnet std.map - "attempted to index array with string name" 错误

jsonnet std.map - "attempted to index array with string name" error

我是 jsonnet 新手

我正在尝试为不同的操作分别调用 name 和 nb。但是当我在代码中使用“specificValues.data.LIST.name”时出现错误“试图用字符串名称索引数组”。

    local NbMap = { ABC: 1, XYZ: 4 },
    
    LIST: std.map(function(key_name) {
      name: key_name,
      nb: NbMap[key_name],
    }, std.objectFields(NbMap)),

local specificParameters = {
  ConfigMap: {
    'data': {
       connect: [
{                     ...
                      name: 'ALL',
                      ...
                      filter: std.join(';', std.map(function(name) name + ':NAM==[' + name + ']', specificValues.data.LIST.name)),
                      ...
                    },
                  ]
                  +
                  [
                    {
                      Max: specificValues.data.LIST.nb / 5,
                      ...
                      name: NbMap.name,
                      ...
                    }
                    for name in specificValues.data.LIST.name
                  ],
    },
  },

我不知道如何在 jsonnet 中调用索引。如果有人知道请告诉我。

第一点相关反馈:您真的应该提供从您的用例中提取的 narrowed-down 可用 摘录,否则这是人们试图提供帮助的额外努力你,这显然对 them/us.

不公平

这里的主要问题是你以某种方式假设你可以循环,例如LIST.namejsonnet 不是这种情况:唯一可能的理解是对数组的理解:[entry for entry in array]array 这里也可以是 std.objectFields(obj)std.objectValues(obj) 如果你首先处理对象)。

在下面粘贴我认为您想要实现的可能解决方案(代码和清单输出):

代码

local NbMap = { ABC: 1, XYZ: 4 };

local specificValues = {
  data: {
    LIST: std.map(function(key_name) {
      name: key_name,
      nb: NbMap[key_name],
    }, std.objectFields(NbMap)),
  },
};

local specificParameters = {
  ConfigMap: {
    data: {
      connect: [
        // Loop over each LIST entry to generate `connect` string
        {
          name: 'ALL',
          filter: std.join(';', std.map(function(x) x.name + ':NAM==[' + x.name + ']', specificValues.data.LIST)),
        },
      ] + [
        // Loop over each LIST entry to add {Max: .., name: ...}
        {
          Max: entry.nb / 5,
          name: entry.name,
        }
        for entry in specificValues.data.LIST
      ],
    },
  },
};

// Show specificParameters manifest rendering
specificParameters

输出

{
   "ConfigMap": {
      "data": {
         "connect": [
            {
               "filter": "ABC:NAM==[ABC];XYZ:NAM==[XYZ]",
               "name": "ALL"
            },
            {
               "Max": 0.20000000000000001,
               "name": "ABC"
            },
            {
               "Max": 0.80000000000000004,
               "name": "XYZ"
            }
         ]
      }
   }
}