rapidjson指针[通俗易懂]

rapidjson指针[通俗易懂]博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjson指针/本系列文章以例子的方式进行呈现。#include”rapidjson/document.h”#include”rapidjson/pointer.h”#include<iostream>usingnamespacerapidjson;/…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

博客搬家,原地址: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;
}

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215569.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Ubuntu下DNS服务器的配置

    Ubuntu下DNS服务器的配置Ubuntu下DNS服务器的配置——Bind9发表于2017/6/1214:35:49 1220人阅读分类:ubuntu服务器DNS

  • VMware Tools安装步骤(windows10)[通俗易懂]

    VMware Tools安装步骤(windows10)[通俗易懂]VMwareTools是VMware虚拟机中的一个工具,其主要作用是能够使鼠标在虚拟机和主机之前流畅地切换,并且能够共享剪贴板。我们可以通过VMwareTools将主机的文件复制粘贴到虚拟机。同时使得Ubuntu界面完全填充VMware界面在Windows10环境下,在电脑上安装VMware和Ubuntu的具体步骤可以看此篇博客:Windows环境下,在VMware中安装Ubuntu的详细步骤本文讲述了在VMware16.0.0,Ubuntu21.10环境下,VMwareTools的安装步骤。1

  • 大学四年,从小白到大神,全网最硬核算法学习攻略,不接受反驳

    大学四年,从小白到大神,全网最硬核算法学习攻略,不接受反驳一道题做半天,另外半天看这道题的题解,一台电脑一包烟,一道题解整一天,是我智商有问题吗?刷了两年题之后,我可以负责任跟你说,刷题吃力很正常,学算法,刷leetcode不是一朝一夕的事情,需要一个过程。而且新手学算法,还很容易陷入一些误区,例如一上来就抱着《算法导论》这种天书,啥数据结构还没学,就去刷leetcode,这其实不好,只会让自己放弃算法。学习算法,应该要一步一步来,要有规划,下面给大家分享下我的算法学习经验吧,觉得有帮助给我点个赞就行了。一、刷题前的一些准备如果你连最基本的数据结

  • Spring boot + Spring Security 多种登录认证方式配置(二)

    Spring boot + Spring Security 多种登录认证方式配置(二)

  • STM32驱动1602A 8086协议[通俗易懂]

    STM32驱动1602A 8086协议[通俗易懂]本来想学I2C发现1602上没有I2C的接口,他是8086并口的就先把它搞了//1602的外设文件#include“lcd1602.h”#include“sys.h”#include“delay.h”#include“stdio.h”voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;R…

  • 列车调度问题[通俗易懂]

    列车调度问题[通俗易懂]题目:高铁货运站的调配问题我们国家大力发展道路交通基础设施,最近这些年修建了大量的高铁线路,以促进国内的物资运输和调配,ZZ是一个超级货运站,是连接亚欧货运的枢纽站,现在ZZ货运站列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号