使用基于libyaml的QtYaml如何获取YAML根元素的键名?
问题原因
你调用YAML::Load加载后得到的根节点是映射(Map)类型,而非字符串类型,直接对映射类型节点执行字符串解码操作无法得到有效结果。你需要先遍历根映射的键集合,才能提取到根键CR。
修正代码
通用遍历写法(适配存在多个根键的场景)
QString yaml = "{CR: {ab: 12}}"; YAML::Node root = YAML::Load(yaml.toStdString()); for (const auto& kv : root) { // 提取键并转为QString QString rootKey = QString::fromStdString(kv.first.as<std::string>()); qDebug() << "根键:" << rootKey; // kv.second 即为对应根键的值节点,此处是{ab:12}对应的子映射 }
单根键场景简化写法
如果你的YAML结构固定只有1个根键,可以直接取第一个键,不需要遍历:
QString yaml = "{CR: {ab: 12}}"; YAML::Node root = YAML::Load(yaml.toStdString()); if (root.Type() == YAML::NodeType::Map && !root.IsNull()) { QString rootKey = QString::fromStdString(root.begin()->first.as<std::string>()); qDebug() << rootKey; // 输出 "CR" }
补充说明
建议操作前先判断节点类型与非空状态,避免YAML格式不符合预期时程序触发崩溃。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

