如何将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
相关产品推荐
相关产品推荐

