使用JsonCpp解析和生成Json

一:什么是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值