如果它在嵌套字典中,如何访问 Jsonnet 中的变量?

How to access a variable in Jsonnet if it's in a nested dictionary?

我的目标是使嵌套字典中的外部字段可以访问内部字段的值。

假设我有以下代码

diction: {
  "outer": "part1",
    {
      "inner": "part2"
    }
  "outer and inner": outer + inner 

}

上面的代码不起作用,因为 inner 由于作用域而无法访问。我想做一些像 global

diction: {
  "outer": "part1",
    {
      global "inner": "part2"
    }
  "outer and inner": outer + inner 

}

或者想办法让 jsonnet 变量可变,这样我仍然可以修改一个变量来提取 inner 的值。

diction: {
  "outer": "part1",
  "outer and inner": "",
    {
      "inner": "part2",
      "outer and inner": outer + inner
    }

}

有没有办法做到这一点?

请注意,您的 jsonnet 脚本在语法上不正确:您应该 jsonnet 视为具有“内部”作用域的“标准”命令式语言, 但真正作为“可编程 JSON” 而不是,要重 over-simplify 它。

因此,jsonnet 程序的结构 (/schema) 与 JSON syntax, nevertheless please do read https://jsonnet.org/learning/tutorial.html 和相关语言 material.

相当接近(r)

将您的原始问题重新设计为语法正确,您可以使用 self 引用当前对象的范围,然后使用点符号来引用包含的对象的字段:

代码

{
  diction: {
    outer: 'part1',
    // NB: `in1` is an object (in jsonnet terms), with key:value entries such as `inner`
    in1: {
      inner: 'part2',
    },
    'outer and inner': self.outer + self.in1.inner,
  },
}

产出

{
   "diction": {
      "in1": {
         "inner": "part2"
      },
      "outer": "part1",
      "outer and inner": "part1part2"
   }
}

请注意,如果您想使 outerin1 字段在 JSON 输出中无效,您可以使用 double-colon 符号作为 outer::in1::.