c++ - 在 YAML 文件中将项目附加到 map

标签 c++ yaml yaml-cpp

在 YAML 文件中,是否可以在定义 map 后向 map 添加项目?

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

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

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

后来意识到我的“水果” map 不完整,我可以稍后在文件中做任何事情(即在定义“蔬菜” map 之后)以将另一个水果附加到现有 map 吗?某处:

fruits:
  oranges:
    quantity: 4

会附加到现有 map 而不是覆盖它吗?

换句话说,是否有一种有效的方法可以将“oranges”附加到文件中其他位置的现有“fruits”映射?

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

最佳答案

具有重复 key 的 YAML 无效。例如,以下是无效的 YAML:

fruits: foo
fruits: bar

如果您的 YAML 文件以:

fruits: whatever
bar: baz

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

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

fruits1: whatever
bar: baz
fruits2: something else

然后在您的代码中,只需将它们与 fruits1fruits2(以及 fruits3,...)关联的值合并.

关于c++ - 在 YAML 文件中将项目附加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931927/

相关文章:

amazon-web-services - Cloudformation Yaml 内在函数 完整函数名称

yaml-cpp - 如何将 yaml 节点数组读入 std::vector

c++ - 如果由于接收对象的线程已结束而未处理 Qt 信号,是否会删除参数?

c++ - filesystem::canonical 能否用于防止传递给 fstream 的文件路径的文件路径注入(inject)

amazon-web-services - CloudFormation 模板 -> ALB 目标组不支持 http/TCP 协议(protocol)

c++ - 使用yaml-cpp解析YAML文件

c++ - yaml-cpp 遍历未定义值的 map 的最简单方法

c++ - 如何通过指针删除 vector 元素?

c++ - 由于更改cpp目录导致的链接问题

delphi - Delphi 中的 YAML 解析器?