C++ Json工具--Jsoncpp用法简介
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用法简介的更多相关文章
- Apache自带压力测试工具ab用法简介
ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...
- monkey测试===Android测试工具Monkey用法简介(转载)
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...
- json简介及JsonCpp用法
[时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...
- Postman用法简介
转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...
- Spring统一返回Json工具类,带分页信息
前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...
- 记录Newtonsoft.Json的日常用法
最近在做一个使用基于.net mvc 实现前后台传输Json的实例.网上找了一些资料.发现在开发的时候,许多的数据交互都是以Json格式传输的.其中涉及序列化对象的使用的有DataContractJs ...
- SpringBoot系列之外部配置用法简介
SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- Linux截屏工具scrot用法详细介绍
Scrot是Linux命令行中使用的截图工具,能够进行全屏.选取等操作,下面小编将针对Scrot截图工具的用法给大家做个详细介绍,通过操作实例来学习Scrot的使用. 在Linux中安装Scrot ...
随机推荐
- java 基本语法(十一) 数组(四)数组的常见算法
1.数组的创建与元素赋值: 杨辉三角(二维数组).回形数(二维数组).6个数,1-30之间随机生成且不重复. 杨辉三角 public class YHSJ { public static void m ...
- 数据可视化之分析篇(七)Power BI数据分析应用:水平分析法
https://zhuanlan.zhihu.com/p/103264851 首先,以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 接下来我会围绕这五种不同的方法论, ...
- 拦截器(Interceptor)中的invocation.invoke()是什么意思?
拦截器(Interceptor)中的invocation.invoke()是什么意思? 最佳答案: invocation.invoke() 就是通知struts2接着干下面的事情 比如 调用下一个拦截 ...
- SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比
引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...
- 利用Serverless应用搭建Hexo博客
本文将介绍如何使用火爆的Serverless应用,15分钟快速搭建Hexo博客.以腾讯云提供的Serverless应用–云开发为例: 步骤1:安装 CloudBase CLI 以及本地部署 Hexo ...
- 题解 洛谷 P5465 【[PKUSC2018]星际穿越】
首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示: 但事实上向后跳其实是不优的,可以有更好的方法来节省花费: 因此我们发现一个点跳到其前一个区间的 ...
- ThinkPHP6 核心分析之Http 类跟Request类的实例化
以下源码分析,我们可以从 App,Http 类的实例化过程,了解类是如何实现自动实例化的,依赖注入是怎么实现的. 从入口文件出发 当访问一个 ThinkPHP 搭建的站点,框架最先是从入口文件开始的, ...
- hdu6755 Mow
半平面交+数组模拟双端队列 人生第一次代码过两百行啊...加油加油 #include<iostream> #include<algorithm> #include<cma ...
- Region Normalization for Image Inpainting, AAAI 2020
论文:Region Normalization for Image Inpainting, AAAI 2020 代码:https://github.com/geekyutao/RN 图像修复的目的是重 ...
- three.js 数学方法之Matrix4
今天郭先生说一说three.js中的Matrix4,相较于Matrix3来说,Matrix4和three.js联系的更紧密,因为在4x4矩阵最常用的用法是作为一个变换矩阵.这使得表示三维空间中的一个点 ...