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

How to save [x, y] in yaml file

在 .yaml 文件中。我知道如何将 x, y 保存在

world:     

   radius: 20
        x: -70
        y: -30

我的问题是我可以将其保存为以下格式吗

world:

        radius: 20
        [-30, -70]

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

我用 C++ 编程

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

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

生产

[2, 3, 5, 7, 11]

不,你不能,不能按照你描述的方式。您可以通过将所需的输出粘贴到在线 YAML 解析器(例如 this 一个)中来轻松测试它,或者,如果您安装了 Python,则可以通过安装 virtualenv 和 do¹:

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 文件包含敏感数据,使用本地测试可能很重要。