rapidjson指针
博客搬家,原地址: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指针相关推荐
- MIT 6.s081学习笔记
MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...
- rapidjson官方教程
原文地址:http://rapidjson.org/zh-cn/md_doc_tutorial_8zh-cn.html 教程 目录 Value 及 Document 查询Value 查询Array 查 ...
- RapidJSON 代码剖析(三):Unicode 的编码与解码
根据 RFC-7159: 8.1 Character Encoding JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The defa ...
- RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...
- C++ rapidjson 基础入门
此篇文章中对于rapidjson的使用方法基本上来源于 rapidjson中文使用手册 rapidjson的基本介绍.使用好处.解析速度等不在此篇讲述,因为在官网上已经讲得非常详细了,这里写的都是本人 ...
- RapidJSON入门:手把手教入门实例介绍
RapidJSON优点 跨平台 编译器:Visual Studio.gcc.clang 等 架构:x86.x64.ARM 等 操作系统:Windows.Mac OS X.Linux.iOS.Andro ...
- rapidjson查询操作基本用法
博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjson查询操作基本用法/ 本系列文章以例子的方式进行呈现. #include "r ...
- Go 知识点(19)— Go 语言中的野指针
野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...
最新文章
- Django框架连接MySQL数据库
- OpenCV高级形态转换的实例(附完整代码)
- datatable 创建列赋值_DataTable创建行和列,DataReader读取
- mt6735通用recovery_山寨4G V8主板MT6735线刷机包
- 根文件系统构建(BusyBox方式)
- 枚举所有进程及其ID
- 计算机网络之数据链路层:13、令牌传递协议、轮询协议-轮询访问介质访问控制
- 手把手教你SpringBoot+MyBatis+Shiro 搭建项目框架
- 基于FPGA的帧差法仿真实现
- 赵鹏的《大师之路》教程
- Hive 修复分区 msck repair table
- ctl文件去空格,word文档段落如何空格去掉 word文档段落前空格
- ORACLE安装入门篇OEL5.4安装ORACLE11g
- FFmpeg命令(七)、 音频与视频合并成视频
- N-gram模型(基于词表)
- 深度学习和大数据之间,主要是什么关系?
- 华为路由器旁挂引流实验(使用流策略)
- 变形金刚2中的各个角色,及车型(带图)第二篇。
- 在word中怎么把图片转换成文字格式
- 神操作|PPT动态卷轴制作技巧,会的人基本没有!
热门文章
- [附源码]java毕业设计疫情防控期间人员档案追寻系统
- vscode 简单配置mingw64
- NOI2015 Day2 T1 荷马史诗(洛谷P2168)
- JavaScript入门 放大镜案例 / 单页应用路由开发 Day23
- 统计信号估计 (二) 最小方差无偏估计量(MUV)的线性模型
- 卡没有信号无服务器,物联卡没信号无服务怎么办
- 变电所的常见故障和解决方案
- Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)
- Spring Boot项目源码启动正常,打成jar包后启动报错找不到主类
- html+css+js实现骰子