C++中如何转义文本以安全传递JSON对象?
解决C++生成合法JSON的字符串转义问题
在C++中手动拼接JSON字符串很容易因为转义不完整导致格式错误,比如未转义的双引号、特殊字符编码问题,不要手动处理转义逻辑,直接用成熟的JSON库就能一键解决所有格式问题。
推荐方案:使用nlohmann/json库
这是一个轻量级的C++ JSON库,仅需包含单个头文件,无需编译链接,非常适合嵌入Node.js模块中使用。
示例代码改造
把你原来的手动拼接代码换成库的API:
#include <nlohmann/json.hpp> using json = nlohmann::json; // ... 读取CSV行的逻辑 ... if(line[0] == "description") { json jsonObj; jsonObj["description"] = line[1]; // 库自动处理转义和编码 std::string jsonStr = jsonObj.dump(); // 生成标准JSON字符串 }
这段代码会自动处理:
- 双引号的转义(把
"变成\") - 反斜杠、控制字符(如换行、制表符)的转义
- 多字节Unicode字符(如Ü、€、ễ、張)的正确编码,确保JSON能被Node.js正确解析
为什么不建议手动转义?
JSON的字符串转义规则包含多种情况,手动处理很容易遗漏:
- 必须转义的字符:
"、\、/,以及ASCII控制字符(U+0000到U+001F) - 对于Unicode字符,虽然大部分可以直接写入,但部分特殊字符仍需转义为
\uXXXX格式,库会自动判断处理
替代方案:Node.js原生API配合N-API
如果你不想引入第三方C库,也可以在C侧通过N-API把原始字符串传递给Node.js,让Node.js的JSON.stringify()来处理格式:
// 假设已经获取了N-API的env对象 napi_value strValue; napi_create_string_utf8(env, line[1].c_str(), NAPI_AUTO_LENGTH, &strValue); napi_value jsonObj; napi_create_object(env, &jsonObj); napi_set_named_property(env, jsonObj, "description", strValue); // 调用Node.js的JSON.stringify napi_value jsonGlobal; napi_get_named_property(env, env->global, "JSON", &jsonGlobal); napi_value stringifyFunc; napi_get_named_property(env, jsonGlobal, "stringify", &stringifyFunc); napi_value args[1] = {jsonObj}; napi_value jsonStr; napi_call_function(env, nullptr, stringifyFunc, 1, args, &jsonStr);
这种方式利用Node.js原生的JSON处理能力,也能保证生成的JSON完全合法。
内容的提问来源于stack exchange,提问作者Markstar
相关产品推荐
相关产品推荐

