1.JsonCpp 简介
JsonCpp 是一个用于 C++ 的 JSON 解析和生成库,支持 JSON 数据的读写、解析和序列化。它提供了简单的 API 来操作 JSON 对象、数组、字符串、数字等类型,是 C++ 开发中处理 JSON 数据的常用工具。
核心功能与类
JsonCpp 主要包含以下核心类:
Json::Value
:表示 JSON 中的值(对象、数组、字符串、数字等)。Json::Reader
:用于解析 JSON 文本,将字符串转换为Json::Value
。Json::Writer
(及其子类):用于将Json::Value
序列化为 JSON 字符串。Json::StreamWriter
:更高效的流式输出工具。
2.Json底层类:
Json::Value
Json::Writer:
Json::Reader:
3.Json简单的Test:
#include<iostream>
#include<memory>
#include<json/json.h>
#include<sstream>
using namespace std;
int main()
{
const char* name="hush";
int age=23;
float score[]={77.5,81,100};
Json::Value root;
root["姓名"]=name;
root["年龄"]=age;
root["成绩"].append(score[0]);
root["成绩"].append(score[1]);
root["成绩"].append(score[2]);
//现在已经放内容放进Json了,开始写:也就是序列化,
Json::StreamWriterBuilder swb;
unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
stringstream ss;
sw->write(root,&ss);
//cout<<ss.str()<<endl;
//用Reader就是反序列化
Json::Value root1;
Json::CharReaderBuilder crb;
unique_ptr<Json::CharReader> cr(crb.newCharReader());
string err;
bool ret=cr->parse(ss.str().c_str(),ss.str().c_str()+ss.str().size(),&root1,&err);
// if(ret==false)
// {
// cerr<<"json fail"<<endl;
// }
cout<<"Parse Returned: "<<(ret?"Success":"Fail")<<endl;
cout<<root1["姓名"].asString()<<endl;
return 0;
}
4.注意事项
- 错误处理:解析 JSON 时务必检查返回值(如
reader.parse()
的返回值)。 - 类型安全:访问 JSON 值时需确认类型(如使用
isString()
、isInt()
等)。 - 性能:处理大量 JSON 数据时,推荐使用
Json::StreamWriter
而非Json::FastWriter
。