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