目录

前言

一、json文件简介

1、json文件

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

二、C++操作json文件

1、jsoncpp 库下载

2、C++从字符串中读取json

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

4、C++写入json文件

5、主函数

附:jsoncpp库配置

1、解压并转移

2、配置属性

3、配置项目


前言

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下载;

群二维码

2、C++从字符串中读取json

json样式比较多,这里分享两种,一种比较直接简单的,一种稍微有些复杂的。

1.简单json样式

我们定义一个字符串来保存如下json数据:

{"name" : "shuiyixin","age" : "21","sex" : "man"
}

读取代码如下:

void readStrJson()
{//字符串  const char* str ="{\"name\":\"shuiyixin\",\"age\":\"21\",\"sex\":\"man\"}";Json::Reader reader;Json::Value root;//从字符串中读取数据  if (reader.parse(str, root)){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;}else{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(); //写入jsonreadFileJson(); //从文件中读取JSON cout << "\n\n";readStrJson();  //从字符串中读jsoncout << "\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、解压并转移

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

将库解压

将两个文件夹复制到自己创建的项目中

2、配置属性

点击调试,并点击项目属性

点击调试->项目属性

选择VC++目录中的包含目录,点击修改

将includ文件夹下的json文件路径复制到这里,并保存

3、配置项目

将src文件夹下的lib_json文件夹下的cpp文件,添加到源文件中:

找到src文件夹->lib_json文件夹->所有cpp文件,并复制

添加到源文件中

然后就可以使用啦。

C++ 之 C++ 操作 json 文件(C++读写json文件)及jsoncpp配置详解相关推荐

  1. 【C++ 之 C++ 操作 json 文件(C++读写json文件)及jsoncpp配置详解】

    文章目录 一.json文件简介 1.json文件 2.json与其他存储数据方式比较 二.C++操作json文件 1.jsoncpp 库下载 2.C++从字符串中读取json 1.简单json样式 2 ...

  2. python不同数据的读入_python读写不同编码txt文件_python读写txt文件

    python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenames=os. ...

  3. vscode中setting.json配置详解

    vscode中的setting.json配置文件配置详解 话不多说上配置文件 大家按需复制到自己的setting.json配置文件中即可 [{// 控制是否在编辑器中显示 CodeLens." ...

  4. 43. Systemd的Unit配置详解,unit文件位置,优先级,unit类型,unit文件字段详解,Unit/Service/Install字段,添加mysql服务等例子

    Systemd的Unit配置详解,unit文件位置和优先级,unit文件类型,unit文件字段详解,[Unit]字段,[Service]字段,[Install]字段,添加服务,创建.service 文 ...

  5. linux系统编程笔记02——Linux命令:修改文件权限命令chmod、chgrp、chown详解

    Linux命令:修改文件权限命令chmod.chgrp.chown详解 Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限 ...

  6. Tomcat 的 Server 文件配置详解

    转载自  Tomcat 的 Server 文件配置详解 前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件, ...

  7. python中打开文件时只允许写入的模式是_详解python中各种文件打开模式

    在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...

  8. python使用视频_Python中操作各种多媒体,视频、音频到图片的代码详解

    我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...

  9. docker-daemon.json各配置详解

    docker-daemon.json各配置详解{"api-cors-header":"", ------在引擎API中设置CORS标头"authori ...

最新文章

  1. python映射类型包括哪三种_python新手入门必备——映射类型相关函数
  2. xcode 可以打开xmind_原来xmind还有一款如此漂亮的思维导图工具
  3. php中for循环控制讲解,PHP教程第九讲——PHP开发基础:PHP的循环控制语句
  4. HTML5 之 简单汇总
  5. oracle 指定格式化,Oracle中的格式化函数
  6. (Docker实战) 第四篇:建立持续集成环境01
  7. Python判断一个字符串是否可以转换为数字(字符串转数字、字符串转整形、字符串转int、字符串转浮点型)
  8. java字符转为数字_java判断字符串是否可以转为数字
  9. zabbix (二)安装
  10. 缓存装饰器的应用习题练习
  11. LeetCode-124.二叉树中的最大路径和
  12. 大学生考华为认证有用吗?考研还是考证?这些困扰你许久的问题终于搞明白了
  13. ubuntu固定内网ip_Ubuntu 设置固定ip地址
  14. 源支付聚合免签支付系统
  15. 2021年度深圳市企业技术中心认定条件申请指南
  16. 一款功能强大的IP查询工具!
  17. 机器学习-RNN机器翻译
  18. 为了让手表更好用,苹果找人先“戴”了7年半
  19. linux内核之alsa,Linux系统中的虚拟调音台Alsamixer的使用
  20. 秋招攻略—如何成为一名图像算法攻城狮(上篇)—知识学习篇

热门文章

  1. 树莓派学习(2)游戏机
  2. 【C语言】扫雷游戏——控制台版
  3. php与mysql之间关系_php与phpMySQL之间的关系_PHP教程
  4. catalog能否用于mysql_数据库-----catalog与schema简介
  5. 【Tensorflow】tensorboard log并排显示、同一窗口显示不同loss
  6. asymptote 中使用中文
  7. 数据分析-时间序列分析
  8. .Net 中使用依赖注入(DI)(一)
  9. AI是通往元宇宙的关键变量
  10. linux自己制作卸载u盘程序,linux挂载和卸载U盘