当前位置:网站首页 > 技术博客 > 正文

jsonrpc cpp



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中使用统一的类型,否则解析起来会麻烦点。

 
  1. Linux下比较简单。 jsoncpp项目里面有cmake配置文件。安装比较简单。
  2. Windows下比较麻烦点。推荐使用vcpkg安装或者使用VS的nuget安装。
 
  1. 使用vcpkg 我使用的静态库
  2. 在VS中配置 头文件/库文件路径和链接器的输入文件 jsoncpp.lib
  3. 我这里使用的是静态库,如果使用的是动态库还需要在程序的运行目录放入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 的使用

版权声明


相关文章:

  • 成员变量怎么定义2024-11-16 14:00:59
  • java内存模型图解2024-11-16 14:00:59
  • 远程输出叫什么2024-11-16 14:00:59
  • 双硬盘系统装在哪个盘2024-11-16 14:00:59
  • ue将dos转换为unix2024-11-16 14:00:59
  • select动态加载option2024-11-16 14:00:59
  • vscode下载安装2024-11-16 14:00:59
  • java中集合框架的层次结构2024-11-16 14:00:59
  • pandas自定义聚合函数2024-11-16 14:00:59
  • iic协议 ack2024-11-16 14:00:59