C++中解析JSON需借助第三方库,常用库有jsoncpp、nlohmann/json和rapidjson。1. jsoncpp成熟稳定,通过Json::Value解析文件并访问字段;2. nlohmann/json语法简洁,类似Python字典操作,仅需包含头文件即可使用;3. rapidjson性能优异,支持SAX和DOM模式,适合高性能场景。选择依据项目需求:稳定性选jsoncpp,开发效率选nlohmann,性能优先选rapidjson。

在C++中解析JSON文件没有像Python或JavaScript那样的原生支持,但可以通过引入轻量级、高效的第三方库来实现。常用的C++ JSON解析库包括 jsoncpp、nlohmann/json(也叫JSON for Modern C++)和 rapidjson。这些库各有特点,可以根据项目需求选择。
jsoncpp 是一个成熟且广泛使用的C++库,支持读取、写入和操作JSON数据。
安装方法(Ubuntu/Debian):
sudo apt-get install libjsoncpp-dev
立即学习“C++免费学习笔记(深入)”;
示例代码:
#include <iostream>
#include <json/json.h>
#include <fstream>
int main() {
std::ifstream file("config.json");
Json::Value root;
Json::CharReaderBuilder builder;
std::string errs;
if (!parseFromStream(builder, file, &root, &errs)) {
std::cerr << "Error parsing JSON: " << errs << std::endl;
return 1;
}
std::cout << "Name: " << root["name"].asString() << std::endl;
std::cout << "Age: " << root["age"].asInt() << std::endl;
return 0;
}
编译命令:
g++ -o parse_json parse_json.cpp -ljsoncpp
nlohmann/json 提供简洁直观的API,使用体验接近Python字典操作,适合现代C++项目。
获取方式: 头文件仅需下载 json.hpp 或通过vcpkg/conan安装。
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
示例代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include "json.hpp"
using json = nlohmann::json;
int main() {
std::ifstream file("data.json");
std::stringstream buffer;
buffer << file.rdbuf();
json j = json::parse(buffer.str());
std::cout << "Name: " << j["name"] << std::endl;
std::cout << "Hobbies: " << j["hobbies"] << std::endl;
// 遍历数组
for (const auto& hobby : j["hobbies"]) {
std::cout << "- " << hobby << std::endl;
}
return 0;
}
该库无需编译依赖,只需包含头文件即可使用,非常适合快速开发。
rapidjson 是腾讯开源的C++ JSON库,以极快的解析速度著称,适用于对性能要求高的场景。
特点: 零依赖、内存占用低、支持SAX和DOM两种解析模式。
示例代码(DOM方式):
#include "rapidjson/document.h"
#include <iostream>
#include <fstream>
#include <sstream>
using namespace rapidjson;
int main() {
std::ifstream file("data.json");
std::stringstream buffer;
buffer << file.rdbuf();
std::string jsonStr = buffer.str();
Document doc;
doc.Parse(jsonStr.c_str());
if (doc.HasParseError()) {
std::cerr << "JSON parse error" << std::endl;
return 1;
}
if (doc.HasMember("name") && doc["name"].IsString()) {
std::cout << "Name: " << doc["name"].GetString() << std::endl;
}
return 0;
}
注意:rapidjson不自带文件流读取功能,需自行加载为字符串。
解析JSON时常见问题包括文件路径错误、格式非法、字段缺失等。建议在实际项目中加入异常处理机制。
基本上就这些。选择哪个库取决于你的项目风格和性能需求:jsoncpp 稳定通用,nlohmann/json 写法优雅,rapidjson 性能突出。根据实际情况选用即可。
以上就是C++怎么解析JSON文件_C++ JSON解析方法与第三方库使用示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号