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. 攻防世界/强网杯 2019-supersqli

    靶场地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page= ...

  2. Django框架10 /sweetalert插件、django事务和锁、中间件、django请求生命周期

    Django框架10 /sweetalert插件.django事务和锁.中间件.django请求生命周期 目录 Django框架10 /sweetalert插件.django事务和锁.中间件.djan ...

  3. C#生成Excel文档(EPPlus)

    1.公式计算 worksheet.Cells["D2:D5"].Formula = "B2*C2";//这是乘法的公式,意思是第二列乘以第三列的值赋值给第四列, ...

  4. mdk/iar汇编区别

    在代码移植中,经常遇到iar的代码转换问题,在此不间断记录一些,个人感觉还是IAR的更接近C一些,备查: 1. #ifdef的使用 // IAR #ifdef MACRO_XX #endif // M ...

  5. 【JUnit测试】总结

    什么是Junit? Junit是xUnit的一个子集,在c++,paython,java语言中测试框架的名字都不相同 xUnit是一套基于测试驱动开发的测试框架 其中的断言机制:将程序预期的结果与程序 ...

  6. presto 转换静态catlog为动态catlog

    近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述了,相信看官多对presto ...

  7. Java Web(2)-jQuery上

    一.jQuery初体验 使用jQuery给一个按钮绑定单击事件 <!DOCTYPE html> <html lang="en"> <head> ...

  8. python新手70个练手项目

    不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自 ...

  9. Vue脚手架创建项目出现 (Failed to download repo vuejs-templates/webpack: Response code 404)

    搭建好(脚手架2.X版本)环境像往常一样使用vue init webpack xxxx 创建项目可以是没多久就开始报错了 报错结果就是:vue-cli · Failed to download rep ...

  10. 大数据框架Hive优化方法

    常规调优手段 Fetch抓取 某些情况查询不必用MapReduce计算,比如select*,可以直接读取文件 本地模式 有时数据量比较小,hive可以通过本地模式在单台机器上处理所有任务,对于小数据集 ...