jsoncpp源码篇(二)

使用jsoncpp时主要使用到的类有 Json::ValueJson::Reader;

 1. Json::Value类

 1.1 提供的转换接口
const char* asCString() const;
String asString() const;
Int asInt() const;
UInt asUInt() const;
Int64 asInt64() const;
UInt64 asUInt64() const;
LargestInt asLargestInt() const;
LargestUInt asLargestUInt() const;
float asFloat() const;
double asDouble() const;
bool asBool() const;
1.2 提供的测试接口
bool isNull() const;
bool isBool() const;
bool isInt() const;
bool isInt64() const;
bool isUInt() const;
bool isUInt64() const;
bool isIntegral() const;
bool isDouble() const;
bool isNumeric() const;
bool isString() const;
bool isArray() const;
bool isObject() const;
1.3 提供的查找接口

//获取对应字段内容
Value get(const char* key, const Value& defaultValue) const;//重载了[], 所以可以使用root["name"],root[0]类似操作;
const Value& operator[](int index) const;
Value& operator[](const char* key);//上面接口本质都调用了find
Value const* find(char const* begin, char const* end) const;
1.4 重要成员变量

 其中成员变量 value_ 保存了Json::Value中实际存储的内容; 采用了联合体;

union ValueHolder {LargestInt int_;LargestUInt uint_;double real_;bool bool_;char* string_; // if allocated_, ptr to { unsigned, char[] }.ObjectValues* map_;
} value_;

其中的 ObjectValues* map_; 成员能够存储 objectValue或arrayValue 值;

定义: typedef std::map<CZString, Value> ObjectValues;

采用了std::map 存储 {"字段",内容};

举例说明:

{"name":"zhangsan", //存储为 char *string_ ; "age":18,          //存储为 LargestInt int_;"score":{          //存储为 ObjectValues* map_;"math":"prefect","english":90}
}

 2. Json::Reader类

2.1 提供的解析接口
bool parse(const std::string& document, Value& root,bool collectComments = true);
2.2 核心成员变量
using Nodes = std::stack<Value*>;
Nodes nodes_;

 存储Json::Value变量指针的栈;

2.3 重要函数
Value& OurReader::currentValue() { return *(nodes_.top()); }

其作用是获取栈顶指针;

该类中主要用到的就是parse()函数; 其内部通过循环查找 "Token" 类型(如'{','}','[',']','"','数字','bool类型'等) 去匹配 readObject,readArray,decodeNumber,decodeString等,通过如下:

currentValue().swapPayload(v);
currentValue().setOffsetStart(token.start_ - begin_);
currentValue().setOffsetLimit(token.end_ - begin_);

类型操作将内容增加到 parse()函数的root变量中;  其中涉及到nodes_入栈出栈操作,栈指针调整操作等; 具体细节怎么把解析的内容和root中的map联系到一起的?值得探索!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23.Linux查看系统进程

在 Linux 中&#xff0c;您可以使用 ps 命令来查看系统进程。下面是一些常用选项和示例&#xff1a; ps aux&#xff1a;显示当前所有进程的详细信息&#xff0c;包括所有用户的进程。 示例输出&#xff1a; USER PID %CPU %MEM VSZ RSS TTY STAT START TIME…

vscode debug的方式

在.vscode文件夹下建立launch.json 例子1&#xff1a;调试python 来自 https://github.com/chunleili/tiPBD/tree/amg {"version": "0.2.0","configurations": [{"name": "hpbd 5 5","type": "python&quo…

Java开发中使用sql简化开发

引语&#xff1a; 在Java开发中&#xff0c;我们更希望数据库能直接给我们必要的数据&#xff0c;然后在业务层面直接进行使用&#xff0c;所以写一个简单的sql语句有助于提高Java开发效率&#xff0c;本文由简单到复杂的小白吸收&#xff0c;还请多多指教。 使用MySQL数据库…

Stable Diffusion学习笔记

一些零散笔记 灰常好的模型网站 LiblibAI哩布哩布AI-中国领先原创AI模型分享社区 出图效率倍增&#xff01;47个高质量的 Stable Diffusion 常用模型推荐 - 优设网 - 学设计上优设 关键词Prompt顺序 画质 风格 主体 外表、描述 表情、情绪 姿势 背景 杂项 同时可以…

23家企业推出昇腾AI系列新品 覆盖云、边、端智能硬件

[中国&#xff0c;上海&#xff0c;2023年7月6日] 昇腾人工智能产业高峰论坛在上海举办。论坛现场&#xff0c;大模型联合创新启动&#xff0c;26家行业领军企业、科研院所与华为将共同基于昇腾AI进行基础大模型与行业大模型应用创新。同时&#xff0c;华为携手伙伴联合发布昇腾…

【C++进阶之路】list的基本使用和模拟实现

文章目录 初步认识①定义②底层原理③迭代器的分类 一、基本使用1.插入结点元素2.删除结点元素3.合并两个有序链表4.将一条链表的某一部分转移到另一条链表5.对链表排序并去重6.vector与list排序的比较 二、模拟实现①要点说明②基本框架③迭代器构造函数- -*->list里的迭代…

Raft算法之日志复制

Raft算法之日志复制 一、日志复制大致流程 在Leader选举过程中&#xff0c;集群最终会选举出一个Leader节点&#xff0c;而集群中剩余的其他节点将会成为Follower节点。Leader节点除了向Follower节点发送心跳消息&#xff0c;还会处理客户端的请求&#xff0c;并将客户端的更…

altium designer OUTPUT FILE Analysis

设计完PCB后,会导出相关光绘文件发给板厂打板,针对AD导出的各个光绘文件,我记录下了它们各个文件对应的层如下: GTL: Top Layer 顶层线路 GBL: Bottom Layer 底层线路 G1,G2… : Mid Layer 1, 2, … 中间信号层 GP1,GP2…: Internal Plane Layer 1, 2, …内电层 G…

JAVA8新特性(Stream API,LocalDate,LocalDateTime)

一. Stream API 1.1 基础 代码参数准备&#xff1a; package com.weige.javaskillpoint.controller;import lombok.Data; import lombok.extern.slf4j.Slf4j;import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; Slf4j public class J…

ElasticSearch搜索相关性及打分的相关原理

文章目录 一、相关性和打分简介二、TF-IDF得分计算公式三、BM25&#xff08;Best Matching 25&#xff09;四、使用explain查看TF-IDF五、通过Boosting控制相关度 一、相关性和打分简介 举个例子来说明&#xff1a; 假设有一个电商网站&#xff0c;用户在搜索框中输入了关键词&…

理解LLM中的ReAct

large language models (LLMs)大语言模型在语义理解和交互式决策方面有着不错的表现。ReAct在一次交互中循环使用推理和行动两个操作解决复杂问题&#xff0c;推理即利用模型自身语义理解能力&#xff0c;行动则利用模型以外的能力&#xff08;如计算、搜索最新消息&#xff0c…

架构训练营学习笔记:4-2 存储架构模式之复制架构

高可用的关键指标 问题&#xff1a;分为故障跟灾难。不是有了多活架构就不在用复制架构 &#xff0c;还是之前的合适原则&#xff1a;多活架构的技术复杂度 跟成本都比复制架构高。 高可用的关键指标 恢复时间目标(RecoveryTimeObjective&#xff0c;RTO)指为避免在灾难发生后…

Spring Cloud Gateway - 新一代微服务API网关

Spring Cloud Gateway - 新一代微服务API网关 文章目录 Spring Cloud Gateway - 新一代微服务API网关1.网关介绍2.Spring Cloud Gateway介绍3.Spring Cloud Gateway的特性4.Spring Cloud Gateway的三大核心概念5.Gateway工作流程6.Gateway核心配置7.动态路由8.Predicate自定义P…

阿里云RockMQ与SpringBoot的整合

前言&#xff1a; 开源版本Rocket和商业版本的RocketMQ有些不同&#xff0c;研究的是商业版本的RocketMQ&#xff0c;阿里云的官方文档&#xff0c;感觉有点乱。看不咋明白&#xff0c;网上虽然有教程&#xff0c;大都还是有点缺少&#xff0c;有时候会突然跳了步骤&#xff0c…

fpga4fun.com/Music box

1.Simple beep 先做一个简单地蜂鸣器&#xff0c;原理是晶振通过不同的分频器分成不同的频率&#xff0c;通过电路发出音调不同的声音。 例子中Pluto FPGA板子有25Mhz的时钟频率&#xff0c;采用16位计数器&#xff08;可以产生65536个不同的数值&#xff09;&#xff0c;则最…

C# 细说async/await的用法

目录 一&#xff0c;引言 二&#xff0c;实例演示 2.1 多线程同步执行下载任务&#xff0c;任务完成后通知 2.2 异步执行下载任务&#xff0c;任务完成后通知 三&#xff0c;async/await的用法 3.1 跨线程修改UI控件 3.2 异步获取数据 一&#xff0c;引言 首先先来区分…

网上书店管理系统

目录 一、系统需求分析 二、数据库概念结构设计 四、数据库物理实现 五、数据库功能调试 一、系统需求分析 需求概述 1.系统背景 当今互联网的迅速发展&#xff0c;使得人们获取信息变得极其便利。在从前&#xff0c;人们以线下书店购买书籍的方式获取知识&#xff0c;常常…

WEB:Confusion1

背景知识 SSTI漏洞 题目 根据网站图片和题目描述的提示&#xff0c;大象是php&#xff0c;蟒蛇是python&#xff0c;说明了这个网站是用python写的 在python中&#xff0c;比较常规的漏洞就是SSTI模板注入 没有思路&#xff0c;先点login和register页面看看 查看源代码 之前…

读论文---On Distillation of Guided Diffusion Models

该论文解决的问题 1 简要描述 2 在之前的工作中存在下述问题 计算过程需要计算: 1 unconditional的unet 2 conditional(w text)的unet 下图展示了计算过程 对应的代码 pipelines-> stable_diffusion-> pipline_stable_diffusion.py-> StableDiffusionPipeling-> 7…

C#在工业自动化领域的应用前景如何?

在2021年&#xff0c;C#与工业自动化已经开始结合&#xff0c;并且这种趋势有望在未来继续发展。C#是一种功能强大的编程语言&#xff0c;其面向对象的特性、跨平台支持以及丰富的类库和工具&#xff0c;使其成为在工业自动化领域应用的有力工具。 我这里刚好有嵌入式、单片机…