当前位置:   article > 正文

jsoncpp下载编译注意事项 C++ json库读写文件

jsoncpp

一、什么是Json及其基本语法
Json:JavaScript Object Notation(JavaScript对象表示法),是轻量级的文本数据交换格式,具有人可读性和机器可读性。
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。
json数据存储在名称/值对中,名称为字符串类型,用双引号括起来,中间为冒号,然后为值,值可以是数字(整数或浮点数)、字符串(双引号中)、逻辑值(true或者false)、数组(中括号中)、对象(大括号中)、空值。
json对象可以包含多个名称/值对,json数组可以包含多个对象。
二、jsoncpp下载及编译
jsoncpp是一个开源c++库,用于C++程序的json读写。
github下载地址:https://github.com/open-source-parsers/jsoncpp
CMake是一个跨平台的编译工具,可以用简单的语言描述所有平台的编译过程,能够根据CMakeLists.txt输出各种各样的makefile和project文件。
Visual Studio打开cmake文件,设置平台属性以及项目属性C/C++中运行库配置,注意,这里的平台配置和运行库要和后续引入的项目属性配置一致,我统一使用了win32和多线程调试DLL,不然会在后续程序引用时出现无法解析的外部符号错误(排查了很久,发现这个问题,一定要更改一致)。
在这里插入图片描述
右键CMakeLists.txt文件点击生成,会在out对应目录生成sln文件。
打开sln,选择jsoncpp_lib进行生成,将生成的lib和bin/dll拷贝出来放在新建的lib目录方便后边使用。
三、新建工程添加jsoncpp库
在新工程中配置jsoncpp的lib库。
工程属性->C/C+±>常规->附加包含目录,引入jsoncpp include目录。C/C+±>代码生成->运行库与jsoncpp配置一致。工程属性->连接器->常规->附加库目录,引入之前拷贝的lib和dll的lib目录。工程属性->连接器->输入->附加依赖项,添加jsoncpp.lib。
配置好后运行过程中如果出现,找不到jsoncpp.dll,无法继续执行程序的错误,将jsoncpp.dll拷贝到工程的main.cpp同级目录下即可。
四、读写json文件
头文件include “json/json.h”,写一个json文件

void writeJson()
{
	Json::Value root;   //定义一个value对象
	//添加键值对
	root["name"] = "zhangsan";
	root["age"] = "20";
	root["sex"] = "male";
	//course属性的值为数组
	root["course"].append("math");
	root["course"].append("english");
	root["course"].append("chiness");
	//新建两个value对象,作为calssmate的值
	Json::Value classmate1;
	classmate1["name"] = "lisi";
	classmate1["age"] = "20";
	classmate1["sex"] = "male";
	Json::Value classmate2;
	classmate2["name"] = "wangwu";
	classmate2["age"] = "20";
	classmate2["sex"] = "male";
	root["classmate"].append(classmate1);
	root["classmate"].append(classmate2);

	//输出带格式的字符串
	Json::StyledWriter sw;
	
	//输出到文件
	ofstream os;
	os.open("test.json", ios::out);
	if (!os.is_open()) cout << "can not find or create test.json" << endl;
	os << sw.write(root);
	os.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行结果:
在这里插入图片描述
解析该json文件:

void readJson()
{
	Json::Reader read;
	Json::Value root;
	//读取json文件
	ifstream in("test.json");
	//解析到root
	read.parse(in, root);
	//按键值对读取
	Json::Value::Members keys = root.getMemberNames();
	for (int i = 0; i < keys.size(); i++) {
		cout << keys.at(i) << " : ";
		if (root[keys[i]].isString()) {
			cout << root[keys[i]].asString();
		}
		else if (root[keys[i]].isArray()) {
			cout << "[ ";
			for (int j = 0; j < root[keys[i]].size(); j++) {
				Json::Value item = root[keys[i]][j];
				if (item.isString()) {
					cout << item.asString() << ", ";
				}
				else if (item.isObject()) {
					cout << "{ " << endl;;
					Json::Value::Members subItems = item.getMemberNames();
					for (int k = 0; k < subItems.size(); k++) {
						cout << subItems.at(k) << " : " << item[subItems[k]] << endl;
					}
					cout << "}" << endl;
				}
			}
			cout << "]";
		}
		cout << endl;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号