将项目附加到YAML文件中的地图

时间:2013-07-29 18:52:55

标签: c++ yaml yaml-cpp

在YAML文件中,是否可以在定义地图后将项目添加到地图中?

例如,如果我有一个文件:

fruits:
  bananas:
    quantity: 4
  apples:
    quantity: 2
  grapes:
    quantity: 37

vegetables:
  lettuce:
    quantity: 2
  beets:
    quantity: 4

然后意识到我的“水果”地图不完整,我可以稍后在文件中做什么(即在定义“蔬菜”地图之后)将另一个水果添加到现有地图中吗?在哪里:

fruits:
  oranges:
    quantity: 4

会被附加到现有地图而不是覆盖它吗?

换句话说,是否有一种有效的方法可以将“橙子”附加到文件中其他地方的现有“水果”地图上?

一些背景知识:我计划在C ++中使用yaml-cpp。我正在使用YAML作为我正在编写的程序的输入文件格式。我将解析用户创建的文件,并将结构转换为程序中的对象。我希望能够将项目附加到地图,因为对象(在此示例中为“水果”)通常散布在输入文件中,因为用户意识到需要它们或在引用它们的其他对象附近使用它们。 / p>

1 个答案:

答案 0 :(得分:1)

重复密钥是无效的YAML。例如,以下是无效的YAML:

fruits: foo
fruits: bar

如果您的YAML文件以:

开头
fruits: whatever
bar: baz

然后无法通过附加到文件来修改与键fruits关联的值。不同的YAML解析器可能以自己的方式解释重复的键,但规范将其定义为错误。

如果需要,您可以对YAML文件进行后期处理,例如:

fruits1: whatever
bar: baz
fruits2: something else

然后在您的代码中,只需合并与fruits1fruits2(以及fruits3,...)相关联的值即可。