博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjson指针/

本系列文章以例子的方式进行呈现。

#include "rapidjson/document.h"
#include "rapidjson/pointer.h"#include <iostream>using namespace rapidjson;/*
*     Json Pointer
*     一个Json Pointer有一串(0至多个)token所组成,每个token之前都有/前缀。每个token
*     可以是字符串或者数字。例如,给定一个json:{
*                                            "foo":["bar", "baz"],
*                                            "pi":3.414
*                                           }
*                               JsonPointer解析为:
*                               1. "/foo"->["bar", "baz"]
*                               2."/foo/0"->"bar"
*                               3."/foo/1"->"baz"
*                               4."pi"->3.414
*       特别注意:一个空Json Pointer""解析为整个json
*/int main()
{Document d;/*          创建、修改、访问dom元素*           创建dom元素的方法: (两种都可以自动生成父值,可以同时创建几级)*               1.Pointer("/Key").Set(document, "value"); key对应值为value*               2.Pointer("/Key").Create(document). 此时创建出来的key对应的值为null*           获取Dom元素的pointer:*                1.Value* vptr = Pointer("/Key").Get(document)*                2.Value& vref = Pointer("/Key").GetWithDefault(document, "defaultValue");*                       注意返回的是引用,如值不存在,则创建此键并深拷贝默认值。*           交换:*                 Pointer("/Key").Swap(document, value); //注意交换的是Value,不能为其他类型*            删除:*                 Pointer("/Key").Erase(document);*//*            针对上述函数的辅助函数*           SetValueByPointer(document, "/Key", "KeyValue");*           CreateValueByPointer(document, "/Key");*           GetValueByPointer(document, "/Key");*           GetValueByPointerWithDefault(document, "/default", "defaultValue");*           SwapValueByPointer(document, "/Key", Value); //必须为Value*           EraseValueByPointer(document, "/Key");*//*          Pointer相关函数说明*           1.Pointer::Get() 或 GetValueByPointer() 函数并不修改 DOM。*                  若那些 token 不能匹配 DOM 里的值,这些函数便返回 nullptr。*                  使用者可利用这个方法来检查一个值是否存在。*           2. Create()、GetWithDefault()、Set()、Swap()都会改变Dom.*                  若一些父值不存在,就会创建它们。若父值类型不匹配 token,*                   也会强行改变其类型。改变类型也意味着完全移除其 DOM 子树的内容*//**         Pointer中负号解析*         1.在Get中,负号永远都是Key的名字*         2.在Set中,若负号在数组的后面,则表示数组最后一个元素的下一个*                   否则表示数组名。例:*         d.Parse("{\"foo\":[123]}");*         SetValueByPointer(d, "/foo/-", 456); // { "foo" : [123, 456] }*         SetValueByPointer(d, "/-", 789);    // { "foo" : [123, 456], "-" : 789 }*//*      字符串化*     可以将一个Pointe字符串化,存储于字符串或者其他输出流。*     如:*     Pointer p(...);*     StringBuffer sb;*     p.StringFy(sb);*     std::cout << sb.GetString() << std::endl;*/Pointer("/project").Set(d, "RapidJson");Pointer("/stars").Set(d, 10);std::cout << d["project"].GetString() << std::endl;std::cout << d["stars"].GetInt() << std::endl;if (Value* stars = Pointer("/stars").Get(d)){stars->SetInt(stars->GetInt() + 1);}std::cout << d["stars"].GetInt() << std::endl;Pointer("/default").GetWithDefault(d, "defaultValue");if (d.HasMember("default"))std::cout << d["default"].GetString() << std::endl;Value swapValue("SwapValue");Pointer("/default").Swap(d, swapValue);std::cout << d["default"].GetString() << std::endl;Pointer("/default").Erase(d);if (!d.HasMember("default"))std::cout << "d Erase default successful" << std::endl;}

rapidjson指针相关推荐

  1. MIT 6.s081学习笔记

    MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...

  2. rapidjson官方教程

    原文地址:http://rapidjson.org/zh-cn/md_doc_tutorial_8zh-cn.html 教程 目录 Value 及 Document 查询Value 查询Array 查 ...

  3. RapidJSON 代码剖析(三):Unicode 的编码与解码

    根据 RFC-7159: 8.1 Character Encoding JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The defa ...

  4. RapidJSON v1.1.0 发布简介

    时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...

  5. C++ rapidjson 基础入门

    此篇文章中对于rapidjson的使用方法基本上来源于 rapidjson中文使用手册 rapidjson的基本介绍.使用好处.解析速度等不在此篇讲述,因为在官网上已经讲得非常详细了,这里写的都是本人 ...

  6. RapidJSON入门:手把手教入门实例介绍

    RapidJSON优点 跨平台 编译器:Visual Studio.gcc.clang 等 架构:x86.x64.ARM 等 操作系统:Windows.Mac OS X.Linux.iOS.Andro ...

  7. rapidjson查询操作基本用法

    博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjson查询操作基本用法/ 本系列文章以例子的方式进行呈现. #include "r ...

  8. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  9. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

最新文章

  1. Django框架连接MySQL数据库
  2. OpenCV高级形态转换的实例(附完整代码)
  3. datatable 创建列赋值_DataTable创建行和列,DataReader读取
  4. mt6735通用recovery_山寨4G V8主板MT6735线刷机包
  5. 根文件系统构建(BusyBox方式)
  6. 枚举所有进程及其ID
  7. 计算机网络之数据链路层:13、令牌传递协议、轮询协议-轮询访问介质访问控制
  8. 手把手教你SpringBoot+MyBatis+Shiro 搭建项目框架
  9. 基于FPGA的帧差法仿真实现
  10. 赵鹏的《大师之路》教程
  11. Hive 修复分区 msck repair table
  12. ctl文件去空格,word文档段落如何空格去掉 word文档段落前空格
  13. ORACLE安装入门篇OEL5.4安装ORACLE11g
  14. FFmpeg命令(七)、 音频与视频合并成视频
  15. N-gram模型(基于词表)
  16. 深度学习和大数据之间,主要是什么关系?
  17. 华为路由器旁挂引流实验(使用流策略)
  18. 变形金刚2中的各个角色,及车型(带图)第二篇。
  19. 在word中怎么把图片转换成文字格式
  20. 神操作|PPT动态卷轴制作技巧,会的人基本没有!

热门文章

  1. [附源码]java毕业设计疫情防控期间人员档案追寻系统
  2. vscode 简单配置mingw64
  3. NOI2015 Day2 T1 荷马史诗(洛谷P2168)
  4. JavaScript入门 放大镜案例 / 单页应用路由开发 Day23
  5. 统计信号估计 (二) 最小方差无偏估计量(MUV)的线性模型
  6. 卡没有信号无服务器,物联卡没信号无服务怎么办
  7. 变电所的常见故障和解决方案
  8. Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)
  9. Spring Boot项目源码启动正常,打成jar包后启动报错找不到主类
  10. html+css+js实现骰子