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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:33