json文件是比较轻量级的文件,格式简单,使用方便。用来存放信息相比其他方式有自己得天独厚的优势。

今天给大家分享的是如何利用C++来操作json文件。

如果你知道如何使用jsoncpp类库,可以不用看附,如果第一次使用,请先到最后,将环境配置好,再进行操作。

有人说用这篇文章中配置的方法有问题。我想大家应该是有些小细节跟我做的不一样,为此,我为大家配置好一个,大家可以加群: 326866692 下载使用。

包括jsoncpp库也在群文件中。

一、json文件简介

1、json文件

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2、json与其他存储数据方式比较

为什么要用json文件呢?

我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用Excel存,如果我们要求比较高,还可以使用数据库存。

相对于txt,word来说,json格式更加明确,获取重要信息非常方便。

相对于xml来说,json格式更加简洁,存储同样的文件,花费的内存更小。

相对于Excel来说,json更适合存储字符类文件。Excel相当于比较简单的数据库了。

相对于数据库来说,json更加方便,数据库我们还需要做一些设置,安装一些软件。json可以直接使用。

二、C++操作json文件

1、jsoncpp 库下载

大家可以自己上网下载jsoncpp 库,也可以加群: 326866692 下载;

string name = root["name"].asString(); int age = root["nomen"].asInt(); string sex = root["sex"].asString(); cout << name + "," << age << "," << sex << endl;

2.复杂json样式

所谓复杂,就是说,json里面分好几层,上面那个简单的只有一层,json数据如下:

"name":"shuiyixin", "major":[ "AI":"MachineLearning" "AI":"DeepLearning" "AI":"ComputerVision"

读取代码如下:

void readStrProJson()
	string strValue = "{\"name\":\"shuiyixin\",\"major\":[{\"AI\":\"MachineLearning\"},{\"AI\":\"DeepLearning\"},{\"AI\":\"ComputerVision\"}]}";
	Json::Reader reader;
	Json::Value value;
	if (reader.parse(strValue, value))
		string out = value["name"].asString();
		cout << out << endl;
		const Json::Value arrayObj = value["major"];
		for (unsigned int i = 0; i < arrayObj.size(); i++)
			out = arrayObj[i]["AI"].asString();
			cout << out<<endl;

3、C++从文件中读取json

从字符串中读取json文件只是为了让大家能够了解json文件,我们最终还是要从文件中读取的。

这个读取的json文件,大家可以通过下面的写json文件自己创建一个。

以下面这个json文件为例:

"age" : 21, "friends" : { "friend_age" : 21, "friend_name" : "ZhaoWuxian", "friend_sex" : "man" "hobby" : [ "sing", "run", "Tai Chi" ], "name" : "shuiyixin", "sex" : "man"

读取代码如下:

void readFileJson()
	Json::Reader reader;
	Json::Value root;
	//从文件中读取,保证当前文件有demo.json文件  
	ifstream in("demo.json", ios::binary);
	if (!in.is_open())
		cout << "Error opening file\n";
		return;
	if (reader.parse(in, root))
		//读取根节点信息  
		string name = root["name"].asString();
		int age = root["age"].asInt();
		string sex = root["sex"].asString();
		cout << "My name is " << name << endl;
		cout << "I'm " << age << " years old" << endl;
		cout << "I'm a " << sex << endl;
		//读取子节点信息  
		string friend_name = root["friends"]["friend_name"].asString();
		int friend_age = root["friends"]["friend_age"].asInt();
		string friend_sex = root["friends"]["friend_sex"].asString();
		cout << "My friend's name is " << friend_name << endl;
		cout << "My friend's sex is "<<friend_sex << endl;
		cout << "My friend is " << friend_age << " years old" << endl;
		//读取数组信息  
		cout << "Here's my hobby:" << endl;
		for (unsigned int i = 0; i < root["hobby"].size(); i++)
			string ach = root["hobby"][i].asString();
			cout << ach << '\t';
		cout << endl;
		cout << "Reading Complete!" << endl;
		cout << "parse error\n" << endl;
	in.close();

4、C++写入json文件

除了读,我们经常还会写入json文件,json文件如下:

"age" : 21, "friends" : { "friend_age" : 21, "friend_name" : "ZhaoWuxian", "friend_sex" : "man" "hobby" : [ "sing", "run", "Tai Chi" ], "name" : "shuiyixin", "sex" : "man"

写入代码如下:

void writeFileJson()
	//根节点  
	Json::Value root;
	//根节点属性  
	root["name"] = Json::Value("shuiyixin");
	root["age"] = Json::Value(21);
	root["sex"] = Json::Value("man");
	//子节点  
	Json::Value friends;
	//子节点属性  
	friends["friend_name"] = Json::Value("ZhaoWuxian");
	friends["friend_age"] = Json::Value(21);
	friends["friend_sex"] = Json::Value("man");
	//子节点挂到根节点上  
	root["friends"] = Json::Value(friends);
	//数组形式  
	root["hobby"].append("sing");
	root["hobby"].append("run");
	root["hobby"].append("Tai Chi");
	//直接输出  
	//cout << "FastWriter:" << endl;
	//Json::FastWriter fw;
	//cout << fw.write(root) << endl << endl;
	//缩进输出  
	cout << "StyledWriter:" << endl;
	Json::StyledWriter sw;
	cout << sw.write(root) << endl << endl;
	//输出到文件  
	ofstream os;
	os.open("demo.json", std::ios::out | std::ios::app);
	if (!os.is_open())
		cout << "error:can not find or create the file which named \" demo.json\"." << endl;
	os << sw.write(root);
	os.close();
 

要注意的是:

1.如果要写入的文件不存在,会自动创建该文件;

2.如果文件存在,写入过程不会覆盖文件中原有数据,而是将新数据写在原有数据后面。

5、主函数

所有的功能模块都写好啦,剩下就是主函数啦:

#include <string>  
#include <json.h>
#include <iostream>  
#include <fstream>  
using namespace std;
void readStrJson(); //从字符串中读取JSON  
void readStrProJson(); //从字符串中读取JSON(内容复杂些)  
void readFileJson(); //从文件中读取JSON 
void writeFileJson();  //将信息保存为JSON格式  
int main(int argc, char *argv[])
	writeFileJson(); //写入json
	readFileJson(); //从文件中读取JSON 
	cout << "\n\n";
	readStrJson();  //从字符串中读json
	cout << "\n\n";
	readStrProJson();//从字符串中读取JSON(内容复杂些)  
	system("pause");
	return 0;

 附:jsoncpp库配置

jsoncpp库配置与opencv配置原理相同,大家可以看一下下面的教程:

opencv配置(win10+VS2015+OpenCV3.1.0) :https://blog.csdn.net/shuiyixin/article/details/80386022

不过jsoncpp库的内容比较少,配置没有opencv那么麻烦:

1、解压并转移

首先将库解压,将下面的两个文件夹复制到你创建的项目下面

目录前言一、json文件简介1、json文件2、json与其他存储数据方式比较二、C++操作json文件1、jsoncpp 库下载2、C++从字符串中读取json3、C++从文件中读取json4、C++写入json文件5、主函数附:jsoncpp库配置1、解压并转移2、配置属性3、配置项目前言json文件是比较轻量级的文件,格式简单... 在进行配置文件取或者进行RPC(Remote Produce Call),我们需要在两个进程间传递大量的数据,这时我们一般会选择json/xml/protobuf来序列化数据,加快数据的传输与解析速度。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅和编,同时也易于机器解析和生成。关于json数据格式的具体介绍,大家可以自己去搜索,今天主要介绍下C/C++如何
VC++要使用JSON来解析数据,这个源码工程进行编译链接就可以得到一个静态链接库json.lib,只需要将这个lib文件拷贝到你的工程目录下,并将\include\json复制到工程目录下,然后将这些头文件加到工程中去就可以了。 #pragma comment(lib, "json_mtd.lib") #include "json/json.h"
1.JSON简介 1.1 什么是JSONJSON是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C++等编程语言都内置了处理JSON数据的方法。 JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅与编,同时也易于计算机解析和生成
为什么要学习解析Json文件? 工作需要呗! 最近在工作项目中,有需求是需要进行解析Json字符串的,但是我只会使用QT去解析Json,且主管规定要使用C/C++语言去解析,说是为了方便移植到其他项目中进行使用… 没办法,只能硬着头皮,在网上找找有没有什么解析Json的开源库是C/C++可以使用的。 找了许多,网上也提供了许多,最终我选择了cJOSN,不为什么,就是因为它小巧玲珑,且是纯C的! 花了一两周的悠闲时间去学习,把一些比较常用的解析的JSON字符串解析解析记录下来! 最后简单介绍一下json是什么
一、JSON文件简介 1、什么是JSON文件JSON文件是一种文本文件,一种配置文件,它具有严格的编规则,这样可以是使用者更好的阅和使用该类型 文件。它的编规则如下:JSON文件使用花括号括起来,代表一段数据,这段数据里面可以有多个字段。每个字段 的结构有点类似于Map容器,一个key对应一个value。字段名必须用双引号包围,而字段的值可以是多种类型,例如 浮点型、整形、字符串类型,甚至可以是一个新的数据段,就数据的嵌套。 2、JSON
文章目录JSON安装下载jsoncpp到linux生成静态库libjsoncpp.a拷贝头文件与静态库到/usr/local下JSON用法简介json简介valuewriterreader测试程序 JSON安装 JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org。 Jsoncpp是个跨平台的开源库,首先从http://jsoncpp.sourceforge.net/上下载jsoncpp库源码, github
JSON: JavaScript Object Notation(JavaScript 对象表示法),是存储和交换文本信息的语法。它类似 XML,但比 XML 更小、更快,更易解析。 JSON 是轻量级的文本数据交换格式,独立于语言,具有自我描述性,更易理解。 JSON 文本格式在语法上与创建 JavaScript 对象的代码相同,由于这种相似性,无需解析器,JavaScript 程序...