JsonCpp

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是存储和交换文本信息的语法,采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为了理想的数据交换语言。

JSON构建于两种结构,如下所述。

(1)key-value集合。一般称为对象或字典。

(2)值的有序列表。一般称为数组或列表。

JSON对象是一个无序的key-value集合。一个JSON对象以“{}”表示。每个key后跟一个“:”;key-value之间以“,”分割。

数组是值的有序集合,数组使用“[]”表示,每一个值之间以“,”分割。

值可以是双引号括起来的字符串,数值,bool,null,对象,数组,并且这些结构可以嵌套。

至于JSON文本的读写解析,不同的语言中都有相应的库或第三方库。而在C++中,比较常用的有JsonCpp和boost property_tree。今天,我们就先来看下JsonCpp库的使用。

先去GitHub下载该库的源码,JsonCpp

让下载到的zip文件解压到任意位置,打开库目录下makefiles目录中的vs2010工程。本人使用的vs2015,打开后,工程结构如下:


然后,直接生成解决方案即可,就会在工程目录的debug目录下生成lib_json.lib文件。

这样,我们就可以使用该lib文件来解析json文件了。下面,写一个测试工程来使用一下该库。

新建一个win32控制台工程TestJson,然后将jsoncpp目录下的include目录和生成的lib文件拷贝到当前工程目录中。然后,在工程TestJson工程上右键->属性->连接器->输入->附加依赖项 中添加一项:lib_json.lib。

测试代码如下:

// TestJson.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include "json/json.h"

int main()
{
	Json::Value json_temp;
	json_temp["name"] = Json::Value("Tom");
	json_temp["age"] = Json::Value(22);
	Json::Value root;
	root["string"] = Json::Value("string");
	root["number"] = Json::Value(123456);
	root["boolean"] = Json::Value(false);
	root["double"] = Json::Value(12.3);
	root["object"] = json_temp;
	root["array"].append("array_string");
	root["array"].append(12);

	Json::FastWriter fast_writer;
	std::cout << fast_writer.write(root);

	Json::StyledWriter styled_writer;
	std::cout << styled_writer.write(root);

	std::string str_test = "{\"id\":1, \"name\":\"Tom\"}";
	Json::Reader reader;
	Json::Value value;
	if (!reader.parse(str_test, value))
		return 0;
	std::string value_name = value["name"].asString();
	std::cout << value_name << std::endl;
	std::cout << value["name"] << std::endl;
	if (!value["id"].isInt())
	{
		std::cout << "id is not int" << std::endl;
	}
	else
	{
		int value_id = value["id"].asInt();
		std::cout << value_id << std::endl;
	}

    return 0;
}

其实,jsoncpp中主要包含3中类型的类:Value,Reader,Writer。并且,所有的对象、类名都在命名空间json中,使用时只要包含json.h即可。

运行结果如下:


当然,此处只是一个基本的使用方式,至于该库的其他知识,大家可以在使用时再挖掘。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值