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,售后保障稳定

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

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

(0)
上一篇 2025年7月13日 上午11:22
下一篇 2025年7月13日 下午12:01


相关推荐

  • BatchMD5Modify_4F-MDMB-BUTINACA

    BatchMD5Modify_4F-MDMB-BUTINACA写前bb最早是看了matlab的代码,搭了环境,demo也跑了,就再也没碰过了。之后想自己把测试和训练部分全部跑通,找了个用pytorch写的代码,看的过程中发现自己还是很多细节部分不是很清楚。虽然文章写的很一笔带过,但是看着代码会发现还是很多疑问的。代码地址:gayhub代码的requirements:UbuntuPython2.7(useAnaconda2.*here)…

    2026年4月17日
    4
  • 数独高级技巧_数独高阶技巧

    数独高级技巧_数独高阶技巧链(Chain)是数独高阶技巧的核心,所有数独盘势都可以通过各种或简单或复杂的链来解出答案。链的本质是命题之间的关系,在解数独时,每个填数的步骤都可表现为在『A格中填入1』、『B格中填入2』这样非真即

    2022年8月4日
    11
  • 国内 OpenClaw 变天了!腾讯阿里字节华为百度小米全线下场,最快部署仅需 1 分钟?(全名单)

    国内 OpenClaw 变天了!腾讯阿里字节华为百度小米全线下场,最快部署仅需 1 分钟?(全名单)

    2026年3月12日
    1
  • windows10禁止自动更新

    windows10禁止自动更新最近被win10系统自动更新折磨的难受。于是百度各种禁止方法,都是治标不治本,两三天的样子就恢复了。最终找到一个第三方禁止还不错。一、win10家庭中文版 1.百度第一种:(阻挡不了微软的更新,只能暂时禁止,2.3天就会恢复)失败告终 2.第二种:(修改注册表更新路径,还是没作用)失败告终3.第三种:第三方小工具禁止 (暂时没…

    2022年6月13日
    29
  • sinc函数原型滤波器窗口matlab,sinc函数

    sinc函数原型滤波器窗口matlab,sinc函数sinc 函数和 rect 函数互为傅里叶变换物理上 单一矩形脉冲 rect t 的频谱是 sinc 函数 单缝的夫琅和费衍射花样是 sinc 函数附 sinc2 函数 sinc2 x sinc x 另一方面 Sinc 函数特性定义为 图 5b 噪声的幅度由公式 7a 的倒数给出 图 7 sinc 功能 产生 sinc 函数波形 调用格式 x sinc t 2015 10 21

    2026年3月20日
    2
  • Spring Data JPA (Oracle)基础使用「建议收藏」

    Spring Data JPA (Oracle)基础使用「建议收藏」SpringDataJPA基础使用学习了尚硅谷的jpa在线视频教程,结合其他资料后动手实践的成果。 1.环境搭建Maven环境,在pom.xml中加入相关hibernate,spring,jdbc,slf4j-log4j12,json-lib,testng的jar包2.Spring配置文件说明配置文件放置位置,在classpath设定的目录下建个resources文件,放s…

    2022年5月7日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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