使用nlohmann/json库解析JSON字符串,只需包含json.hpp头文件并调用parse方法即可实现。

在C++中解析一个简单的JSON字符串,最常用的方法是使用第三方库。C++标准库本身不提供JSON解析功能,因此需要借助成熟的开源库来实现。以下是几种主流且易于使用的JSON解析方案。
使用nlohmann/json(推荐)
这是目前C++中最流行的JSON库之一,支持C++11及以上版本,头文件仅需一个,集成非常方便。安装方法:
从GitHub下载或通过包管理器安装:
- 下载地址:https://www.php.cn/link/b82e68e6366d4177332acdf3fa4d1e3a
- 只需将单个头文件
json.hpp包含到项目中即可使用。
基本用法示例:
立即学习“C++免费学习笔记(深入)”;
#include#include #include "json.hpp" // 使用命名空间 using json = nlohmann::json; int main() { std::string json_str = R"({"name": "Tom", "age": 25, "city": "Beijing"})"; try { json j = json::parse(json_str); std::cout << "Name: " << j["name"] << std::endl; std::cout << "Age: " << j["age"] << std::endl; std::cout << "City: " << j["city"] << std::endl; } catch (const std::exception& e) { std::cerr << "JSON解析失败: " << e.what() << std::endl; } return 0; }
该库支持自动类型推导,例如:
本文档主要讲述的是Android数据格式解析对象JSON用法;JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
j["name"].get<:string>()j["age"].get()
使用RapidJSON
RapidJSON是一个高性能的C++ JSON库,由腾讯开发,适合对性能要求较高的场景。特点:
- 无依赖、仅头文件
- 支持SAX和DOM两种解析方式
- 内存占用低,速度快
示例代码(DOM方式):
#include#include #include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" using namespace rapidjson; int main() { std::string json_str = R"({"name": "Jerry", "age": 30})"; Document doc; doc.Parse(json_str.c_str()); if (doc.HasParseError()) { std::cerr << "JSON解析出错" << std::endl; return -1; } if (doc.HasMember("name") && doc["name"].IsString()) { std::cout << "Name: " << doc["name"].GetString() << std::endl; } if (doc.HasMember("age") && doc["age"].IsInt()) { std::cout << "Age: " << doc["age"].GetInt() << std::endl; } return 0; }
使用JsonCpp
JsonCpp是较早出现的C++ JSON库,接口清晰,适合初学者。安装方法:
- Ubuntu:
sudo apt-get install libjsoncpp-dev - 或从GitHub编译安装:https://www.php.cn/link/b4866aabd0aa02ee10cfc72af8eb195e
示例代码:
#include#include #include int main() { std::string json_str = R"({"title": "Engineer", "salary": 15000})"; Json::Value root; Json::CharReaderBuilder builder; std::string errs; std::istringstream ss(json_str); if (!parseFromStream(builder, ss, &root, &errs)) { std::cerr << "解析失败: " << errs << std::endl; return -1; } std::cout << "Title: " << root["title"].asString() << std::endl; std::cout << "Salary: " << root["salary"].asInt() << std::endl; return 0; }
选择建议
- 新手或快速开发:推荐使用 nlohmann/json,语法简洁,像原生C++一样自然。
- 高性能需求:考虑 RapidJSON,特别适合游戏、服务器等场景。
- 已有项目使用JsonCpp:可继续沿用,但新项目建议优先选前两者。
基本上就这些。只要引入合适的库,C++解析JSON并不复杂,关键是选对工具并处理好异常情况。










