如何在yaml文件中保存[x,y]

时间:2017-07-06 00:32:23

标签: yaml yaml-cpp

在.yaml文件中。我知道如何在

中保存x,y
world:     

   radius: 20
        x: -70
        y: -30

我的问题是我可以用以下格式保存吗

world:

        radius: 20
        [-30, -70]

基本上,我想在一行中存储两个浮点数(x,y)。

我用c ++编程

2 个答案:

答案 0 :(得分:1)

发出序列时,可以在YAML::Flow前加上序列。来自documentation

YAML::Emitter out;
out << YAML::Flow;
out << YAML::BeginSeq << 2 << 3 << 5 << 7 << 11 << YAML::EndSeq;

产生

[2, 3, 5, 7, 11]

答案 1 :(得分:1)

不,你不能,不是你所描述的方式。您可以通过在线YAML解析器(例如this解析器)粘贴所需的输出来轻松测试,或者,如果您安装了Python,则可以通过安装virtualenv并执行¹:

pip install ruamel.yaml.cmd
yaml round-trip input.yaml

您的所需输出在顶层有一个带有键world的映射,其值以映射开头(带有键radius和值20)然后切换到流式样序列:[-30, -70]。这是不正确的,你不能将映射键值对与序列混合。

有几种方法可以解决这个问题。你可以这样做:

world:
  radius: 20
  [-30, -70]:

这是非常精细的YAML,对-30, -70是值null的键,不需要明确。请注意,一些YAML解析器不支持此表单,我链接的表单。

IMO,最合乎逻辑的单线解决方案:

world:
  radius: 20
  [x, y]: [-30, -70]

您可以通过编译和运行获得:

#include <iostream>
#include "yaml-cpp/yaml.h"

int main()
{
   YAML::Emitter out;
   out << YAML::BeginMap;
   out << YAML::Key << "world";
   out << YAML::Value << YAML::BeginMap;
   out << YAML::Key << "radius";
   out << YAML::Value << 20;
   out << YAML::Key << YAML::Flow << YAML::BeginSeq << "x" << "y" << YAML::EndSeq;
   out << YAML::Key << YAML::Flow << YAML::BeginSeq << "-30" << "-70" << YAML::EndSeq;

   std::cout << out.c_str() << "\n";
   return 0;
}

您的第一个YAML示例也是无效的YAML:您应该在映射中对齐键而不是冒号:

world:     

   radius: 20
   x: -70
   y: -30

¹免责声明:我是ruamel.yaml.cmd包的作者。如果您的YAML文件包含敏感数据,则使用本地测试非常重要。