yaml-cpp中数字字符串输出无引号,如何为深层节点添加双引号?
解决yaml-cpp深层节点字符串输出无引号的问题
要让YAML输出里的特定深层节点值带上双引号,不用全局设置样式,直接给目标节点单独配置输出样式即可:
方法1:给目标节点单独设置双引号样式
直接对需要加引号的深层节点调用SetStyle方法,指定双引号格式:
YAML::Node myNode; // 赋值后给目标节点设置样式 myNode["some-value"] = "3"; myNode["some-value"].SetStyle(YAML::EmitterStyle::DoubleQuoted); // 嵌套深层节点的情况同理 myNode["parent"]["child"] = "123"; myNode["parent"]["child"].SetStyle(YAML::EmitterStyle::DoubleQuoted); YAML::Emitter emitter; emitter << myNode;
方法2:显式构造字符串节点(避免自动类型推断)
如果yaml-cpp把看起来像数字的字符串自动推断为数字类型,可直接构造字符串类型节点再设置样式:
YAML::Node myNode; // 显式创建字符串类型节点,避免被识别为数字 myNode["some-value"] = YAML::Node(YAML::NodeType::Scalar, "3"); myNode["some-value"].SetStyle(YAML::EmitterStyle::DoubleQuoted);
生成的YAML输出示例:
some-value: "3" parent: child: "123"
这样输出的带引号字符串能通过JSON Schema的类型验证,且仅对指定节点生效,不影响其他节点格式。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

