使用 yaml-cpp 解析 json/yaml 数组
Parsing json/yaml array with yaml-cpp
我正在使用 yaml-cpp 来解析我的配置文件,因为我必须能够解析 yaml 和 json 文件,这是我找到的唯一支持 yaml 1.2 的 cpp 库。解析时,我不要求密钥,因为我不知道当前配置文件的组件是什么。我还使用 ncurses 来显示配置文件内容。
在解析包含数组的配置文件时,我没有得到这些数组。程序只是跳过它们。
yaml配置文件示例:
SLICE_POSITION: 285
SLICE_HEIGHT: 15
OUTPUT_ADDRESS: "localhost:3335"
VIRTCAM_IDS:
- 0
- 1
- 2
json 配置文件示例:
{
"width" : 1366,
"mappings" : {
"x" : [ "mt_position_x" ],
"y" : [ "mt_position_y" ]
},
"active_quadrangle" : {
"bottom_left" : "[1472;4698;0]",
"bottom_right" : "[5654;4698;0]",
"top_left" : "[1472;1408;0]",
"top_right" : "[5654;1408;0]"
},
"x" : 0.0,
"y" : 0.0
}
我的代码:
YAML::Node config = YAML::LoadFile(fileName);
for(YAML::const_iterator it = config.begin(); it != config.end();) {
const char* key = (it->first.as<std::string>()).c_str();
mvprintw(i, 4, key);
i++; // row number
++it;
}
我从 yaml 文件中获取的密钥:
VIRTCAM_IDS
SLICE_POSITION
SLICE_HEIGHT
OUTPUT_ADDRESS
我从 json 文件中获取的密钥:
uuid
mappings
width
device
sensor_type
target
height
x
active_quadrangle
y
有人可以告诉我如何解析它,以便我可以获取数组(及其值)吗?还有什么办法可以让我按正确的顺序获得物品?
感谢您的回答!
当您在地图中循环时,您只是在阅读带有 it->first
的键。要也读取这些值,您需要 it->second
:
YAML::Node config = YAML::LoadFile(fileName);
for (YAML::const_iterator it = config.begin(); it != config.end(); ++it) {
std::string key = it->first.as<std::string>();
YAML::Node value = it->second;
// here, you can check what type the value is (e.g., scalar, sequence, etc.)
switch (value.Type()) {
case YAML::NodeType::Scalar: // do stuff
case YAML::NodeType::Sequence: // do stuff
// etc.
}
}
我正在使用 yaml-cpp 来解析我的配置文件,因为我必须能够解析 yaml 和 json 文件,这是我找到的唯一支持 yaml 1.2 的 cpp 库。解析时,我不要求密钥,因为我不知道当前配置文件的组件是什么。我还使用 ncurses 来显示配置文件内容。
在解析包含数组的配置文件时,我没有得到这些数组。程序只是跳过它们。
yaml配置文件示例:
SLICE_POSITION: 285
SLICE_HEIGHT: 15
OUTPUT_ADDRESS: "localhost:3335"
VIRTCAM_IDS:
- 0
- 1
- 2
json 配置文件示例:
{
"width" : 1366,
"mappings" : {
"x" : [ "mt_position_x" ],
"y" : [ "mt_position_y" ]
},
"active_quadrangle" : {
"bottom_left" : "[1472;4698;0]",
"bottom_right" : "[5654;4698;0]",
"top_left" : "[1472;1408;0]",
"top_right" : "[5654;1408;0]"
},
"x" : 0.0,
"y" : 0.0
}
我的代码:
YAML::Node config = YAML::LoadFile(fileName);
for(YAML::const_iterator it = config.begin(); it != config.end();) {
const char* key = (it->first.as<std::string>()).c_str();
mvprintw(i, 4, key);
i++; // row number
++it;
}
我从 yaml 文件中获取的密钥:
VIRTCAM_IDS
SLICE_POSITION
SLICE_HEIGHT
OUTPUT_ADDRESS
我从 json 文件中获取的密钥:
uuid
mappings
width
device
sensor_type
target
height
x
active_quadrangle
y
有人可以告诉我如何解析它,以便我可以获取数组(及其值)吗?还有什么办法可以让我按正确的顺序获得物品?
感谢您的回答!
当您在地图中循环时,您只是在阅读带有 it->first
的键。要也读取这些值,您需要 it->second
:
YAML::Node config = YAML::LoadFile(fileName);
for (YAML::const_iterator it = config.begin(); it != config.end(); ++it) {
std::string key = it->first.as<std::string>();
YAML::Node value = it->second;
// here, you can check what type the value is (e.g., scalar, sequence, etc.)
switch (value.Type()) {
case YAML::NodeType::Scalar: // do stuff
case YAML::NodeType::Sequence: // do stuff
// etc.
}
}