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

