一:什么是JSON?
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),是一种key-value的表示方法,类似于{ “name”:“Kobe” }
二:什么时候用JSON?
因为JSON的明了,简单,易于解析。JSON常用来传输和存储对应的文本信息。
三:什么是JsonCpp
JsonCpp是一个基于c++的免费开源库。
下载地址:https://sourceforge.net/projects/jsoncpp/
jsoncpp中主要的类:
Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)。
Json::Reader可以通过对Json源目标进行解析,得到一个解析好了的Json::Value,通常字符串或者文件输入流可以作为源目标。
四:配置对应的工程,将JsonCpp对应的库文件和头文件及实现文件引入到自己所使用的工程中
五:解析一个Json字符串
#include <iostream>
#include <json.h>
#include <string>
using namespace std;
int main()
{
//这次要做的是解析该字段
string strJson="{\"name\" : \"Tocy\", \"salary\" : 100, \"msg\" : \"work hard\", \"files\" : [\"1.ts\", \"2.txt\"]}";
//1.首先定义一个队形的Json对象
Json::Value JsonVal;
//2.在定义一个Json阅读器
Json::Reader JsonRead;
JsonRead.parse(strJson, JsonVal);
//3.通过key值访问对应的字段
//解析"name"
if (JsonVal.isMember("name") && JsonVal["name"].isString())
{
//使用时,记得先判断是否是该Json的字段,在判断是否是对应的类型,然后才可以转换成对应的类型
cout << "JsonVal[name] = " << JsonVal["name"].asString()<< endl;
}
//解析"salary"
if (JsonVal.isMember("salary") && JsonVal["salary"].isInt())
{
cout << "JsonVal[salary] = " << JsonVal["salary"].asInt() << endl;
}
//解析MSG
if (JsonVal.isMember("msg") && JsonVal["msg"].isString())
{
cout << "JsonVal[msg] = " << JsonVal["msg"].asString() << endl;
}
//解析file
if (JsonVal.isMember("files") && JsonVal["files"].isArray())
{
Json::Value JsonValChild = JsonVal["files"];
for (unsigned int i =0 ; i < JsonValChild.size() ; i++)
{
cout << "JsonValChild[files] " << i << " is" << JsonValChild[i].asString() << endl;
}
}
}
6.将对应的JSON字段写入到配置文件中
ofstream ofs;
ofs.open("test.txt");
//1.直接将对应的Json对象保存到文件中
//ofs << JsonVal << endl;
//2.不带格式的输出FastWriter
Json::FastWriter fw;
ofs << fw.write(JsonVal) << endl;
//3.带格式的输出 StyledWriter
//Json::StyledWriter sw;
//ofs << sw.write(JsonVal) << endl;
ofs.close();
7.从配置文件中读取对应的JSON
ifstream ifs;
ifs.open("test.txt");
Json::Value JsonVal;
Json::Reader JsonRead;
JsonRead.parse(ifs, JsonVal);
ifs.close();
8.生成对应的JSON
将对应的JSON对应转换成字符串使用的函数为;toStyledString()
参考 https://www.cnblogs.com/tocy/p/json-intro_jsoncpp-lib.html