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面向对象详解-下
一. static static:静态的,可以用来修饰属性.方法.代码块(或初始化块).内部类 static修饰属性(类变量): 由类创建的所有的对象,都共用这一个属性 当其中一个对象对此属性进行修改 ...
- 大话深度学习:B站Up主麦叔教你零代码实现图像分类神经网络
之前,我在B站发布了“大话神经网络,10行代码不调包,听不懂你打我!”的视频后,因为简单易懂受到了很多小伙伴的喜欢! 但也有小伙伴直呼不够过瘾,因为大话神经网络只有4个神经元. 也有小伙伴问不写代码, ...
- Dubbo测试环境服务调用隔离这么玩对么
背景阐述 前几天,有位同学问我一个关于 Dubbo 的问题.他的诉求是这样子的: 诉求一 第一个诉求是本地开发的时候想自己调用自己的服务,比如自己在改 A 服务,然后出问题了,本地再启动一个 B 服务 ...
- Python+selenium自动化测试之浏览器基础操作
**前言** 本文主要讲解webdriber框架,Selenium 就像真实用户所做的一样,Selenium 测试可以在 Windows.Linux 和 Macintosh上的 Internet ...
- OSCP Learning Notes - Capstone(4)
SickOS 1.2 Walkthrough Preparation: Down load the SickOS virtual machines from the following website ...
- Python Ethical Hacking - VULNERABILITY SCANNER(5)
EXPLOITATION - XSS VULNS XSS - CROSS SITE SCRIPTING VULNS Allow an attacker to inject javascript cod ...
- ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported.
ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported ...
- iview实战 : 全屏去头去尾的弹窗
<template> <Button @click="modal3 = true" >No title bar</Button> <Mod ...
- java 获取传入值的区间
/** * 获取值的区间 * * @param num 值 */ public static Map<String, Integer> getNumSection(Integer num) ...
- 【最短路+bfs+缩点】Paint the Grid Reloaded ZOJ - 3781
题目: Leo has a grid with N rows and M columns. All cells are painted with either black or white initi ...