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

如何将Boost.Json的string类型值转换为不带引号的std::string

问题原因

boost::json::serialize 接口的作用是将JSON值序列化为符合JSON语法规范的文本,而JSON标准中字符串类型的表示本身就会包裹双引号,因此你得到带引号的结果是该接口的正常行为,并非执行错误。

解决方案

Boost.JSON 提供的 boost::json::string 类型本身支持直接转换为原生 std::string,不需要走序列化接口,转换后不会额外添加引号,适配你使用的v1.76.0版本和C++20标准。

场景1:已通过as_string拿到确定的字符串实例(对应你提供的示例代码)

直接将boost::json::string对象赋值给std::string即可,修改后的示例代码如下:

boost::json::error_code errorCode;
boost::json::value jsonValue = boost::json::parse("{\"fff\": \"abc\"}", errorCode);

auto jsonString = jsonValue.as_object()["fff"].as_string();
std::string myString{jsonString}; // 直接构造,无额外引号
// 也可以写为 std::string myString = jsonString.to_string(); 效果一致

场景2:通过if_string获取的字符串指针

先判空避免空指针访问,再直接解引用赋值:

auto jsonStringPtr = jsonValuePtr->if_string();
std::string myString;
if (jsonStringPtr) { // 判空确保安全
    myString = *jsonStringPtr;
}

转换后的myString值为原始字符串内容,不会附带前后双引号,符合需求。

内容的提问来源于stack exchange,提问作者montjet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:45:03