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

C++如何将含大量转义字符的变量值插入原始字符串并存入JSON

问题解答

1. C++原始字符串能否插入运行期变量

C++的原始字符串(Raw String Literal)属于编译期常量,仅用于代码编写阶段直接定义包含大量转义字符的字符串常量,不支持在运行阶段往其中插入动态变量的值。

2. 你的场景无需手动处理原始字符串

你使用的nlohmann/json库已经内置了符合JSON规范的字符串转义处理逻辑:直接将包含任意特殊字符、转义字符的std::string变量赋值给JSON对象的字段即可,库会自动完成转义,不需要你手动将变量转换为原始字符串格式。

3. 现有代码的优化建议

  • 你代码中j[firstObj] = one;写法存在问题:如果firstObj不是提前定义的字符串变量,需要加引号改为j["firstObj"] = one;,否则会触发编译错误。
  • 读文件生成stringa的逻辑可以简化,不需要循环逐个字符拼接:
std::ifstream conf(confPath, std::ios::binary);
// 直接用迭代器范围构造string,无需中间vector和循环
std::string stringa((std::istreambuf_iterator<char>(conf)), std::istreambuf_iterator<char>());
j["conf"] = stringa;

4. 后续写入文件的实现方式

输出完整JSON到文件

直接调用JSON对象的dump方法即可,库会自动处理所有字段的转义,输出符合规范的JSON内容:

std::ofstream out_file("output.json");
// 第一个参数为缩进空格数,填-1会输出压缩格式的JSON
out_file << j.dump(4);
out_file.close();

单独提取原始字符串内容

如果需要单独取出conf字段的原始内容使用,直接调用get方法即可,库会自动还原转义,得到和原始stringa完全一致的内容:

std::string restored_conf = j["conf"].get<std::string>();
// 此时restored_conf和你读取文件得到的stringa内容完全相同,无多余转义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:27:03