Json简介

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可读性强,易扩展,很适合做通信协议,下面主要介绍一款C++的Json库:Jsoncpp.

用法简介

数据类型

Jsoncpp中,封装类Json::Value,既可以用于表示Json对象,也可以用于表示Json数组(也叫列表或者集合)。使用起来比较方便;当作数组使用时,在实例化时需要指定其类型如下:

Json::Value array(Json::arrayValue);

这样就创建了一个空的json数组,数组的成员可以是单个对象,也可以是复杂对象,如下:

简单成员:

[ "1", "2", "3" ]   //字符串列表
[ 1, 2, 3 ] //整数列表

也可以是:

	"test":[
{
"no":1,
"val": 21
},
{
"no":2,
"val": 21
},
{
"no":3,
"val": 32,
"msg": "for test" //列表中每个对象的内容可以不一样
}
]

解析如下:



对象很简单,就是key-value的形式;value的数据类型可以是整型、浮点、字符串。

{
“no”:1,
"name": "Tom"
}

C++代码示例

#include <iostream>
#include "json/json.h"
#include <string> using namespace std; int main()
{
//1.创建json字符串
cout << "1.creat json string----------------------------------------"<<endl;
Json::Value jsonObj; jsonObj["id"] = 1; //int
jsonObj["name"] = "Fens";//string
jsonObj["age"] = 18; //int Json::Value jsonArray(Json::arrayValue); //creat an array
jsonArray[0] = "13633838481"; //给数组添加数据,注:这两个手机号是上学时用的,现在已经不是我的了^_^
jsonArray[1] = "15617051150";
jsonObj["phone"]=jsonArray; //将数组添加到对象中 Json::StyledWriter styleWriter; //有个格式
Json::FastWriter fastWriter; //压缩,无格式
cout << "styleWriter json string: "<<styleWriter.write(jsonObj)<<endl;
cout << "-----------------------------------------------------------"<<endl;
cout << "fastWriter json string: "<<fastWriter.write(jsonObj)<<endl; //2.解析json字符串
cout << "2.decode json string----------------------------------------"<<endl;
const string jsonString = "{\"id\":1,\"name\":\"fens\",\"phone\":[\"15617051150\",\"13833838481\"],\"school\":[{\"type\":\"primary\",\"name\":\"夏邑县第一实验小学\",\"address\":\"河南省夏邑县文化路\"},{\"type\":\"middle\",\"name\":\"夏邑县第三高级中学\",\"address\":\"河南省夏邑县建设路孔祖大道\"},{\"type\":\"college\",\"name\":\"郑州大学\",\"address\":\"河南省郑州市高新技术开发区科学大道\"}]}"; Json::Reader reader;
Json::Value rootObj;
reader.parse(jsonString, rootObj); cout <<"read json string: "<<rootObj.toStyledString()<<endl; return 0;
}

上面代码是介绍的Json字符串的解析与生产,如果需要读写文件,只需要把读取到的字符串交给Json::Reader,或者把Json::styleWriter或者Json::fastWriter序列化后的字符串写入文件即可。

代码执行输出结果

1.creat json string----------------------------------------
styleWriter json string: {
"age" : 18,
"id" : 1,
"name" : "Fens",
"phone" : [ "13633838481", "15617051150" ]
} -----------------------------------------------------------
fastWriter json string: {"age":18,"id":1,"name":"Fens","phone":["13633838481","15617051150"]} 2.decode json string----------------------------------------
read json string: {
"id" : 1,
"name" : "fens",
"phone" : [ "15617051150", "13833838481" ],
"school" : [
{
"address" : "河南省夏邑县文化路",
"name" : "夏邑县第一实验小学",
"type" : "primary"
},
{
"address" : "河南省夏邑县建设路孔祖大道",
"name" : "夏邑县第三高级中学",
"type" : "middle"
},
{
"address" : "河南省郑州市高新技术开发区",
"name" : "郑州的大学",
"type" : "college"
}
]
}

JSON在线解析及格式化验证 - JSON.cn

Json在线解析网站: https://www.json.cn/#

Jsoncpp源码及示例代码: https://gitee.com/fenstec/demo_code.git


C++ Json工具--Jsoncpp用法简介的更多相关文章

  1. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  2. monkey测试===Android测试工具Monkey用法简介(转载)

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  3. json简介及JsonCpp用法

    [时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...

  4. Postman用法简介

    转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...

  5. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

  6. 记录Newtonsoft.Json的日常用法

    最近在做一个使用基于.net mvc 实现前后台传输Json的实例.网上找了一些资料.发现在开发的时候,许多的数据交互都是以Json格式传输的.其中涉及序列化对象的使用的有DataContractJs ...

  7. SpringBoot系列之外部配置用法简介

    SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...

  8. [转帖]linux lsof 用法简介

    linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...

  9. Linux截屏工具scrot用法详细介绍

    Scrot是Linux命令行中使用的截图工具,能够进行全屏.选取等操作,下面小编将针对Scrot截图工具的用法给大家做个详细介绍,通过操作实例来学习Scrot的使用.   在Linux中安装Scrot ...

随机推荐

  1. Pop!_OS配置Python环境

    Pop!_OS配置Python环境 #0x0 安装vscode #0x1 配置vscode #0x0 安装vscode 见vscode安装 #0x1 配置vscode 安装Python插件 安装pyl ...

  2. CSS(二)- 选择器 - 伪元素和伪类(思维导图)

    伪元素 伪元素可以创建一些文档语言无法创建的虚拟元素.比如:文档语言没有一种机制可以描述元素内容的第一个字母或第一行,但伪元素可以做到(::first-letter.::first-line).同时, ...

  3. 论TEMP临时变量与VAR静态变量区别

    TEMP临时变量:顾名思义,这种变量类型是临时的,没有固定的存放数据的内存空间.每次扫描结束后则清零,在下个扫描周期开始时,这个变量的值都是不确定的,一般为0.使用临时变量需要遵循一个原则:先赋值再使 ...

  4. 数据可视化基础专题(十二):Matplotlib 基础(四)常用图表(二)气泡图、堆叠图、雷达图、饼图、

    1 气泡图 气泡图和上面的散点图非常类似,只是点的大小不一样,而且是通过参数 s 来进行控制的,多的不说,还是看个示例: 例子一: import matplotlib.pyplot as plt im ...

  5. java 基本语法(九) 数组(二) 一维数组

    1.一维数组的声明与初始化 正确的方式: int num;//声明 num = 10;//初始化 int id = 1001;//声明 + 初始化 int[] ids;//声明 //1.1 静态初始化 ...

  6. redis(十六):Redis 安装,部署(LINUX环境下)

    第一步:下载安装包 访问https://redis.io/download  到官网进行下载.这里下载最新的4.0版本. 第二步:安装 1.通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压 ...

  7. 那些非cmake生成的VTK工程存在的让人崩溃的坑

    由于cmake和IDE的一些编译选项不同,所以导致我们使用者需要多做一些事情.而且vtk官方也表示: If you are not using CMake to compile your code, ...

  8. DirectX11 With Windows SDK--34 位移贴图

    前言 在前面的章节中,我们学到了法线贴图和曲面细分.现在我们可以将这两者进行结合以改善效果,因为法线贴图仅仅只是改善了光照的细节,但它并没有从根本上改善几何体的细节.从某种意义上来说,法线贴图只是一个 ...

  9. Ethical Hacking - NETWORK PENETRATION TESTING(2)

     ALFA  AWUS 1900 RTL8814AU https://www.alfa.com.tw/products_detail/2.htm Follow the guide on aircrac ...

  10. 深入探究JVM之内存结构及字符串常量池

    前言 Java作为一种平台无关性的语言,其主要依靠于Java虚拟机--JVM,我们写好的代码会被编译成class文件,再由JVM进行加载.解析.执行,而JVM有统一的规范,所以我们不需要像C++那样需 ...