如何更改Node引用的关联数组中的一个值

时间:2016-07-18 18:17:23

标签: yaml

所以如果我使用yaml术语错误,我会提前道歉我是新手。

所以我在一个关联数组的列表中有这个项目,我想使用一个节点在文件中多次重复它,但是我需要更改其中一个子数组中的一个值而且我没有&#39 ; t知道怎么做而不覆盖整个数组。

所以这是列表中的项目

- &def_service type: service name: Remote Service config: machine: '' version: '1.0.0' apikey: VALUE_I_WANT_TO_CHANGE

我和我试图做的是

- <<: *def_service config: apikey: NEW_VALUE

但这只是覆盖了整个数组,因此配置只是

{config:{apikey:NEW_VALUE}}

我非常感谢这里的答案我很困惑。

2 个答案:

答案 0 :(得分:0)

好的,所以我想到的答案可能不是最好的答案就是为这个配置数组引入另一个变量。

- &def_service type: service name: Remote Service config: &service_config machine: '' version: '1.0.0' apikey: VALUE_I_WANT_TO_CHANGE

所以要参考它我做了这个

- <<: *def_service config: <<: *service_config apikey: NEW_VALUE

答案 1 :(得分:0)

YAML不是一种编程语言。它专为数据表示而设计,而不是用于数据转换。

您使用的合并密钥(<<)不是YAML规范的一部分。它是YAML类型存储库的一部分,它已过时(因为它是为YAML 1.1定义的)。因此,您的问题高度依赖于您使用的YAML处理器。一个处理器可能会实现它,而另一个处理器则不会。

由于您遇到了特定问题,因此根据您的问题编写YAML可能会更好,然后在您的代码中处理它(假设您负责代码)。像这样:

- !config_base
  &def_service
  type: service
  name: Remote Service
  config: &service_config
    machine: ''
    version: '1.0.0'
    apikey: VALUE_I_WANT_TO_CHANGE

- !config_child
  base: *def_service
  substitutions:
    config:
      apikey: NEW_VALUE

然后,您可以编写在反序列化的YAML结构中进行替换的代码。