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

如何在C++中直接读取原生JSON内容,减少格式转换?

解决方案:用nlohmann库快速生成JSON字符串dump

首先,你提到的"字符串dump"其实就是把JSON对象序列化为JSON字符串字面量(即外层包裹双引号、内部特殊字符转义的格式)。用nlohmann库可以非常简洁地实现,不需要额外复杂编码——核心思路是先把普通JSON对象转成标准JSON字符串,再把这个字符串包装成JSON的字符串类型,最后序列化这个字符串类型就能得到你想要的格式。

简化后的代码示例

#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() {
    std::ifstream f_json("C://json.txt");
    json jFile;
    try {
        // 解析客户提供的普通JSON文件(无外层引号)
        jFile = json::parse(f_json);
        
        // 一步生成目标字符串dump:先转普通JSON字符串,再转JSON字面量
        std::string string_dump = json(jFile.dump()).dump();
        
        // 输出结果就是你需要的 "{ \"happy\": true, \"pi\": 3.141 }" 格式
        std::cout << string_dump << std::endl;
    } catch (const json::exception& e) {
        std::cerr << "解析或序列化错误:" << e.what() << std::endl;
    }
    return 0;
}

代码解释

  • jFile.dump():把解析得到的JSON对象转成普通的JSON字符串(比如"{\"happy\":true,\"pi\":3.141}",内部引号已转义但无外层引号)。
  • json(jFile.dump()):把这个普通JSON字符串包装成nlohmann的json对象,类型为字符串。
  • 再次调用.dump():将这个字符串类型的JSON对象序列化为JSON字面量,自动在外层添加双引号,最终得到你需要的格式。

关于C++标准库的说明

C++标准库本身没有内置的JSON处理功能,所以如果不使用第三方库(比如nlohmann),你需要自己实现JSON的解析和转义逻辑——这显然会增加很多代码,远不如用nlohmann简洁。nlohmann库是头文件式的,不需要编译链接,已经是最轻量化的选择了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:18:02