json中仅支持两种结构:
- 对象
- 数组
“名称/值”对的集合(A collection of name/value pairs)。一般称为对象(object)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序表,在大部分语言中,它被理解为数组(array)。
你看到的json 要么{}包围,要么[]包围
键值之间的对应关系使用 : 表示,左边的为key,右边的为value。
一般key使用字符串,当然也可以使用数字,但是建议key只使用字符串。
value的取值就比较随便,可以是任何任何json支持的类型(比如object,array,string,number,true/false,null等)这就为嵌套类型带来了可能。
object可以认为是多个pair的集合。
其语法是以{作为object开始,以}作为object结束,不同的pair之间使用,分割。
需要说明的是object中的数据存储是无序的。(所有你生成的json,在解析打印出来不一定是你生成的json顺序)
array是value的有序集合。
其语法是以[作为array起始,以]作为array结束,array元素之间使用,分割。
实际使用中建议在array中使用统一的类型,否则解析起来会麻烦点。
- Linux下比较简单。 jsoncpp项目里面有cmake配置文件。安装比较简单。
- Windows下比较麻烦点。推荐使用vcpkg安装或者使用VS的nuget安装。
- 使用vcpkg 我使用的静态库
- 在VS中配置 头文件/库文件路径和链接器的输入文件 jsoncpp.lib
- 我这里使用的是静态库,如果使用的是动态库还需要在程序的运行目录放入jsoncpp.dll
需要注意vcpkg的编译方式(MT/MTd MD/MDd) 静态库是MT/MTd,动态库是后者。
如果vs报错4996,那是因为你使用了旧式的API,使用新式API或者关闭这个错误。
在VS项目配置中 C/C++高级。禁用特定警告输入4996。 但是更加推荐使用新的API来解析和生成json。
JsonCpp 中所有对象、类名都在 namespace Json 中, 只需要包含 即可。
注意需要链接哦,我是用的cmake
JsonCpp 主要包含三种类型的 class: (老式API讲解理论核心并不过时,这里按照老式的来讲,新式api只是为了安全而已)
- Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
- Json::Reader:将文件流或字符串创解析到Json::Value中,。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
- Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)
真实场景就是当配置文件是json时候
checkjson.json的内容为
这里面保存的是最简单的object,我们可以使用下面代码将其读入并解析:
- 判断json字符串中是否存在某键值的几种方法
- 删除json中的对象
- 类型判断 类型转换各种常用的api
- Value的size() 函数的返回值是返回值是 unsigned int; 可以点进去看下定义
那么我们在for循环的时候就需要注意了!
- 对不存在的键获取值会返回此类型的默认值
- 通过key获取value时,要先判断value的类型,使用错误的类型获取value会导致程序中断。
- 获取json数组中某一项key的value应该使用value[arraykey][index][subkey]获取或循环遍历数组获取。(所以我们也可以直接从root直接拿数组的信息)
- append函数功能是将Json::Value添加到数组末尾。just for array!!!
- 参考以及转载处 json简介及JsonCpp用法
- 参考以及转载处 新版jsoncpp的一些基本用法
- 参考以及转载处 JsonCpp 的使用
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7892.html