You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:36:08