mysvac-jsonlib 2.1.0
一个轻量高效的C++17 JSON解析库
 
载入中...
搜索中...
未找到
Jsonlib::JsonValue类 参考

Json数据通用类 更多...

#include <jsonlib.h>

Public 成员函数

 JsonValue (std::string_view str, std::string_view::const_iterator &it)
 反序列化构造函数
 
 JsonValue (const std::initializer_list< JsonValue > &init_list)
 列表初始化器
 
JsonType type () const noexcept
 获取当前对象数据类型
 
void reset () noexcept
 重置,设为null值
 
void clear () noexcept
 按类型清除
 
size_t size () const noexcept
 获取子元素数量
 
 JsonValue ()=default
 默认构造函数
 
 JsonValue (const JsonType &jsonType)
 指定类型的构造函数
 
 JsonValue (std::string_view str) noexcept
 字符串构造函数
 
JsonValueoperator= (std::string_view str)
 字符串赋值函数
 
 JsonValue (const char *str) noexcept
 字符串字面量构造函数
 
JsonValueoperator= (const char *str) noexcept
 字符串字面量赋值函数
 
 JsonValue (const bool &bl) noexcept
 布尔类型构造
 
 JsonValue (const int &num) noexcept
 整数类型构造
 
 JsonValue (const long long &num) noexcept
 长整数类型构造
 
 JsonValue (const double &num) noexcept
 浮点数类型构造
 
 JsonValue (const long double &num) noexcept
 浮点数类型构造
 
 JsonValue (const std::nullptr_t &) noexcept
 nullptr_t类型构造
 
 JsonValue (const JsonArray &jsonArray) noexcept
 JsonArray拷贝构造
 
 JsonValue (JsonArray &&jsonArray) noexcept
 JsonArray移动构造
 
 JsonValue (const JsonObject &jsonObject) noexcept
 JsonObject拷贝构造
 
 JsonValue (JsonObject &&jsonObject) noexcept
 JsonObject移动构造
 
JsonValueoperator= (const JsonArray &jsonArray) noexcept
 JsonArray拷贝赋值
 
JsonValueoperator= (JsonArray &&jsonArray) noexcept
 JsonArray移动赋值
 
JsonValueoperator= (const JsonObject &jsonObject) noexcept
 JsonObject拷贝赋值
 
JsonValueoperator= (JsonObject &&jsonObject) noexcept
 JsonObject移动赋值
 
JsonValueoperator= (const bool &bl) noexcept
 布尔类型赋值
 
JsonValueoperator= (const int &num) noexcept
 整数类型赋值
 
JsonValueoperator= (const long long &num) noexcept
 长整数类型赋值
 
JsonValueoperator= (const double &num) noexcept
 浮点数类型赋值
 
JsonValueoperator= (const long double &num) noexcept
 浮点数类型赋值
 
JsonValueoperator= (const std::nullptr_t &) noexcept
 null类型赋值
 
 JsonValue (const JsonValue &jsonValue) noexcept
 拷贝构造
 
 JsonValue (JsonValue &&jsonValue) noexcept
 移动构造
 
JsonValueoperator= (const JsonValue &jsonValue) noexcept
 拷贝赋值
 
JsonValueoperator= (JsonValue &&jsonValue) noexcept
 移动赋值
 
std::string serialize () const noexcept
 序列化对象
 
std::string serialize_pretty (const size_t &space_num=2, const size_t &depth=0) const noexcept
 序列化对象且美化
 
bool is_object () const noexcept
 判断是不是对象
 
bool is_array () const noexcept
 判断是不是数组
 
bool is_string () const noexcept
 判断是不是字符串
 
bool is_bool () const noexcept
 判断是不是布尔
 
bool is_number () const noexcept
 判断是不是数值
 
bool is_int64 () const noexcept
 判断是不是整数
 
bool is_double () const noexcept
 判断是不是浮点
 
bool is_null () const noexcept
 判断是不是null
 
bool is_value () const noexcept
 判断是不是值类型
 
long long as_int64 () const
 转换成long long类型,复制一份
 
double as_double () const
 转换成double类型,复制一份
 
long double as_ldouble () const
 转换成double类型,复制一份
 
bool as_bool () const
 转换成bool类型,复制一份
 
std::string as_string () const
 转换成string类型,注意是拷贝一份
 
JsonObjectas_object ()
 获取内部Object对象的引用
 
const JsonObjectas_object () const
 获取内部JsonObject对象的const引用
 
JsonArrayas_array ()
 获取内部Array对象的引用
 
const JsonArrayas_array () const
 获取内部JsonArray对象的const引用
 
JsonValueat (const size_t &index)
 at元素访问
 
JsonValueat (const std::string &key)
 at元素访问
 
JsonValueoperator[] (const size_t &index)
 []元素访问
 
JsonValueoperator[] (const std::string &key)
 []元素访问
 
bool hasKey (const std::string &key) const noexcept
 检查是否存在某个key
 
void push_back (const JsonValue &jsonBasic)
 末尾拷贝插入元素,O(1)
 
void push_back (JsonValue &&jsonBasic)
 末尾移动插入元素,O(1)
 
void pop_back ()
 末尾删除元素,O(1)
 
void insert (const size_t &index, const JsonValue &jsonBasic)
 在指定位置插入元素
 
void insert (const size_t &index, JsonValue &&jsonBasic)
 在指定位置移入元素
 
void insert (const std::string &key, const JsonValue &jsonBasic)
 插入键值对
 
void insert (const std::string &key, JsonValue &&jsonBasic)
 移动插入键值对
 
void erase (const size_t &index)
 删除指定位置的元素
 
void erase (const std::string &key)
 删除key的元素
 

Private 类型

using JsonVar = std::variant<bool, std::string, JsonObject, JsonArray>
 

Private 属性

JsonVar content_ { false }
 存储JSON数据。
 
JsonType type_ { JsonType::ISNULL }
 表示当前对象存储的数据类型,
 

详细描述

Json数据通用类

JSON反序列化后的,可操作对象。

注解
可以直接使用此类。

成员类型定义说明

◆ JsonVar

using Jsonlib::JsonValue::JsonVar = std::variant<bool, std::string, JsonObject, JsonArray>
private

构造及析构函数说明

◆ JsonValue() [1/18]

Jsonlib::JsonValue::JsonValue ( std::string_view str,
std::string_view::const_iterator & it )

反序列化构造函数

从str的it位置开始解析,请勿使用此构造,请使用deserialize()函数。

注解
虽然是公共函数,能够正常工作,但不推荐直接使用。

◆ JsonValue() [2/18]

Jsonlib::JsonValue::JsonValue ( const std::initializer_list< JsonValue > & init_list)

列表初始化器

参数
init_list初始化列表

参数数量为0时,被认为是null类型 参数数量为2且第一个参数是字符串类型时,被认为是object 其他时候都会被认为是array

注解
注意区分{}初始化器和()初始化器,二者效果不同

◆ JsonValue() [3/18]

Jsonlib::JsonValue::JsonValue ( )
default

默认构造函数

默认构造,生成ISNULL类型的JSON数据。

◆ JsonValue() [4/18]

Jsonlib::JsonValue::JsonValue ( const JsonType & jsonType)
explicit

指定类型的构造函数

根据类型进行初始化。

◆ JsonValue() [5/18]

Jsonlib::JsonValue::JsonValue ( std::string_view str)
noexcept

字符串构造函数

参数
str需要转义的字符串

将输入字符串反转义,生成对象。

注解
不会视为JSON结构解析,而是直接当做JSON字符串

◆ JsonValue() [6/18]

Jsonlib::JsonValue::JsonValue ( const char * str)
noexcept

字符串字面量构造函数

参数
strJSON格式的文本数据。

直接视为文本数据,反转义后生成对象

注解
不会视为JSON结构解析,而是直接当做JSON字符串

◆ JsonValue() [7/18]

Jsonlib::JsonValue::JsonValue ( const bool & bl)
inlinenoexcept

布尔类型构造

◆ JsonValue() [8/18]

Jsonlib::JsonValue::JsonValue ( const int & num)
inlinenoexcept

整数类型构造

◆ JsonValue() [9/18]

Jsonlib::JsonValue::JsonValue ( const long long & num)
inlinenoexcept

长整数类型构造

◆ JsonValue() [10/18]

Jsonlib::JsonValue::JsonValue ( const double & num)
inlinenoexcept

浮点数类型构造

◆ JsonValue() [11/18]

Jsonlib::JsonValue::JsonValue ( const long double & num)
inlinenoexcept

浮点数类型构造

◆ JsonValue() [12/18]

Jsonlib::JsonValue::JsonValue ( const std::nullptr_t & )
inlinenoexcept

nullptr_t类型构造

◆ JsonValue() [13/18]

Jsonlib::JsonValue::JsonValue ( const JsonArray & jsonArray)
noexcept

JsonArray拷贝构造

◆ JsonValue() [14/18]

Jsonlib::JsonValue::JsonValue ( JsonArray && jsonArray)
noexcept

JsonArray移动构造

◆ JsonValue() [15/18]

Jsonlib::JsonValue::JsonValue ( const JsonObject & jsonObject)
noexcept

JsonObject拷贝构造

◆ JsonValue() [16/18]

Jsonlib::JsonValue::JsonValue ( JsonObject && jsonObject)
noexcept

JsonObject移动构造

◆ JsonValue() [17/18]

Jsonlib::JsonValue::JsonValue ( const JsonValue & jsonValue)
noexcept

拷贝构造

◆ JsonValue() [18/18]

Jsonlib::JsonValue::JsonValue ( JsonValue && jsonValue)
noexcept

移动构造

成员函数说明

◆ as_array() [1/2]

JsonArray & Jsonlib::JsonValue::as_array ( )

获取内部Array对象的引用

获取内部Array对象的引用,可调用std::vector相关函数,非const,可修改内容

异常
JsonTypeException转换失败,类型错误
注解
类型必须是ARRAY

◆ as_array() [2/2]

const JsonArray & Jsonlib::JsonValue::as_array ( ) const
nodiscard

获取内部JsonArray对象的const引用

获取内部Array对象的引用,可调用std::vector相关函数,const,不可修改内容

异常
JsonTypeException转换失败,类型错误
注解
类型必须是ARRAY

◆ as_bool()

bool Jsonlib::JsonValue::as_bool ( ) const
nodiscard

转换成bool类型,复制一份

异常
JsonTypeException转换失败,类型错误
注解
必须是BOOL

◆ as_double()

double Jsonlib::JsonValue::as_double ( ) const
nodiscard

转换成double类型,复制一份

异常
JsonTypeException转换失败,类型错误
注解
必须是NUMBER

◆ as_int64()

long long Jsonlib::JsonValue::as_int64 ( ) const
nodiscard

转换成long long类型,复制一份

异常
JsonTypeException转换失败,类型错误
注解
必须是NUMBER

◆ as_ldouble()

long double Jsonlib::JsonValue::as_ldouble ( ) const
nodiscard

转换成double类型,复制一份

异常
JsonTypeException转换失败,类型错误
注解
必须是NUMBER

◆ as_object() [1/2]

JsonObject & Jsonlib::JsonValue::as_object ( )

获取内部Object对象的引用

获取内部Object对象的引用,可调用std::map相关函数,非const,可修改内容

异常
JsonTypeException转换失败,类型错误
注解
类型必须是OBJECT

◆ as_object() [2/2]

const JsonObject & Jsonlib::JsonValue::as_object ( ) const
nodiscard

获取内部JsonObject对象的const引用

获取内部Object对象的const引用,可调用std::map相关函数,const,不可修改内容

异常
JsonTypeException转换失败,类型错误
注解
类型必须是OBJECT

◆ as_string()

std::string Jsonlib::JsonValue::as_string ( ) const
nodiscard

转换成string类型,注意是拷贝一份

异常
JsonTypeException转换失败,类型错误(只有ARRAY和OBJECT会转换失败)。
注解
只要不是ARRAY和OBJECT,都能正常返回。

◆ at() [1/2]

JsonValue & Jsonlib::JsonValue::at ( const size_t & index)

at元素访问

at访问,带越界检查,越界抛出out_of_range,必须是ARRAY类型

异常
JsonTypeException类型错误异常
std::out_of_range越界不存在
注解
不会创建新元素

◆ at() [2/2]

JsonValue & Jsonlib::JsonValue::at ( const std::string & key)

at元素访问

at访问,带越界检查,key不存在时抛出out_of_range,必须是OBJECT类型

异常
JsonTypeException类型错误异常
std::out_of_rangekey不存在
注解
不会创建新元素

◆ clear()

void Jsonlib::JsonValue::clear ( )
noexcept

按类型清除

对象变为空字典 数组变空数组 数值变0 布尔变false 字符串变空串

注解
不会调用其他函数

◆ erase() [1/2]

void Jsonlib::JsonValue::erase ( const size_t & index)

删除指定位置的元素

删除指定位置的元素,当前对象必须是ARRAY类型,不能越界

异常
JsonTypeException当前对象并非ARRAY类型。
out_of_range索引越界。
注解
你也可以使用 as_array().erase( x ),调用std::map的erase函数

◆ erase() [2/2]

void Jsonlib::JsonValue::erase ( const std::string & key)

删除key的元素

删除指定key的元素,当前对象必须是OBJECT类型,key可以不存在(不会执行任何操作,不会抛出异常)。

异常
JsonTypeException当前对象并非OBJECT类型。
注解
你也可以使用 as_object().erase( x ),调用std::map的erase函数

◆ hasKey()

bool Jsonlib::JsonValue::hasKey ( const std::string & key) const
nodiscardnoexcept

检查是否存在某个key

检查是否存在某个key,不会抛出异常,非object类型直接返回false

◆ insert() [1/4]

void Jsonlib::JsonValue::insert ( const size_t & index,
const JsonValue & jsonBasic )

在指定位置插入元素

注解
必须是ARRAY类型

◆ insert() [2/4]

void Jsonlib::JsonValue::insert ( const size_t & index,
JsonValue && jsonBasic )

在指定位置移入元素

注解
必须是ARRAY类型

◆ insert() [3/4]

void Jsonlib::JsonValue::insert ( const std::string & key,
const JsonValue & jsonBasic )

插入键值对

注解
必须是Object类型

◆ insert() [4/4]

void Jsonlib::JsonValue::insert ( const std::string & key,
JsonValue && jsonBasic )

移动插入键值对

注解
必须是Object类型

◆ is_array()

bool Jsonlib::JsonValue::is_array ( ) const
inlinenodiscardnoexcept

判断是不是数组

◆ is_bool()

bool Jsonlib::JsonValue::is_bool ( ) const
inlinenodiscardnoexcept

判断是不是布尔

◆ is_double()

bool Jsonlib::JsonValue::is_double ( ) const
inlinenodiscardnoexcept

判断是不是浮点

◆ is_int64()

bool Jsonlib::JsonValue::is_int64 ( ) const
inlinenodiscardnoexcept

判断是不是整数

◆ is_null()

bool Jsonlib::JsonValue::is_null ( ) const
inlinenodiscardnoexcept

判断是不是null

◆ is_number()

bool Jsonlib::JsonValue::is_number ( ) const
inlinenodiscardnoexcept

判断是不是数值

◆ is_object()

bool Jsonlib::JsonValue::is_object ( ) const
inlinenodiscardnoexcept

判断是不是对象

◆ is_string()

bool Jsonlib::JsonValue::is_string ( ) const
inlinenodiscardnoexcept

判断是不是字符串

◆ is_value()

bool Jsonlib::JsonValue::is_value ( ) const
inlinenodiscardnoexcept

判断是不是值类型

◆ operator=() [1/14]

JsonValue & Jsonlib::JsonValue::operator= ( const bool & bl)
inlinenoexcept

布尔类型赋值

◆ operator=() [2/14]

JsonValue & Jsonlib::JsonValue::operator= ( const char * str)
noexcept

字符串字面量赋值函数

参数
strJSON格式的文本数据。

直接视为文本数据,反转义后生成对象

注解
不会视为JSON结构解析,而是直接当做JSON字符串

◆ operator=() [3/14]

JsonValue & Jsonlib::JsonValue::operator= ( const double & num)
inlinenoexcept

浮点数类型赋值

◆ operator=() [4/14]

JsonValue & Jsonlib::JsonValue::operator= ( const int & num)
inlinenoexcept

整数类型赋值

◆ operator=() [5/14]

JsonValue & Jsonlib::JsonValue::operator= ( const JsonArray & jsonArray)
noexcept

JsonArray拷贝赋值

◆ operator=() [6/14]

JsonValue & Jsonlib::JsonValue::operator= ( const JsonObject & jsonObject)
noexcept

JsonObject拷贝赋值

◆ operator=() [7/14]

JsonValue & Jsonlib::JsonValue::operator= ( const JsonValue & jsonValue)
noexcept

拷贝赋值

◆ operator=() [8/14]

JsonValue & Jsonlib::JsonValue::operator= ( const long double & num)
inlinenoexcept

浮点数类型赋值

◆ operator=() [9/14]

JsonValue & Jsonlib::JsonValue::operator= ( const long long & num)
inlinenoexcept

长整数类型赋值

◆ operator=() [10/14]

JsonValue & Jsonlib::JsonValue::operator= ( const std::nullptr_t & )
inlinenoexcept

null类型赋值

◆ operator=() [11/14]

JsonValue & Jsonlib::JsonValue::operator= ( JsonArray && jsonArray)
noexcept

JsonArray移动赋值

◆ operator=() [12/14]

JsonValue & Jsonlib::JsonValue::operator= ( JsonObject && jsonObject)
noexcept

JsonObject移动赋值

◆ operator=() [13/14]

JsonValue & Jsonlib::JsonValue::operator= ( JsonValue && jsonValue)
noexcept

移动赋值

◆ operator=() [14/14]

JsonValue & Jsonlib::JsonValue::operator= ( std::string_view str)

字符串赋值函数

参数
strJSON格式的文本数据

直接视为文本数据,反转义后生成对象

注解
不会视为JSON结构解析,而是直接当做JSON字符串

◆ operator[]() [1/2]

JsonValue & Jsonlib::JsonValue::operator[] ( const size_t & index)

[]元素访问

[]访问,必须是ARRAY类型,无越界检查。

异常
JsonTypeException类型错误异常
注解
如果指向末尾,会创建新元素,

◆ operator[]() [2/2]

JsonValue & Jsonlib::JsonValue::operator[] ( const std::string & key)

[]元素访问

[]访问,必须是OBJECT类型,无越界检查。

异常
JsonTypeException类型错误异常
注解
如果key不存在,会创建新元素,所以可以直接赋值。

◆ pop_back()

void Jsonlib::JsonValue::pop_back ( )

末尾删除元素,O(1)

异常
JsonTypeException非数组类型抛出异常
注解
必须是ARRAY类型

◆ push_back() [1/2]

void Jsonlib::JsonValue::push_back ( const JsonValue & jsonBasic)

末尾拷贝插入元素,O(1)

异常
JsonTypeException非数组类型抛出异常
注解
必须是ARRAY类型

◆ push_back() [2/2]

void Jsonlib::JsonValue::push_back ( JsonValue && jsonBasic)

末尾移动插入元素,O(1)

异常
JsonTypeException非数组类型抛出异常
注解
必须是ARRAY类型

◆ reset()

void Jsonlib::JsonValue::reset ( )
inlinenoexcept

重置,设为null值

注解
不会调用其他函数

◆ serialize()

std::string Jsonlib::JsonValue::serialize ( ) const
nodiscardnoexcept

序列化对象

将对象序列化,生成JSON结构的字符串,去除无效空白字符。

返回
std::string&类型,当前对象内部字符串值的应用。
注解
注意,序列化包含反转义,注意区分使用。

◆ serialize_pretty()

std::string Jsonlib::JsonValue::serialize_pretty ( const size_t & space_num = 2,
const size_t & depth = 0 ) const
nodiscardnoexcept

序列化对象且美化

对象序列化,生成JSON结构的字符串,自动生成换行和空格缩进。

参数
space_num每次缩进使用的空格数量 默认 2
depth当前对象缩进次数,默认 0
注解
注意,序列化包含反转义,注意区分使用。

◆ size()

size_t Jsonlib::JsonValue::size ( ) const
nodiscardnoexcept

获取子元素数量

对象和列表返回子元素个数,字符串返回长度。

注解
数值,布尔和null 返回值待定为1

◆ type()

JsonType Jsonlib::JsonValue::type ( ) const
inlinenodiscardnoexcept

获取当前对象数据类型

返回
Json::JsonType类型,表示当前对象数据类型

类成员变量说明

◆ content_

JsonVar Jsonlib::JsonValue::content_ { false }
private

存储JSON数据。

std::variant类型,存储JSON数据,需要C++17。

注解
注意,Map和List存储的也是JsonObject对象,含有嵌套内容。

◆ type_

JsonType Jsonlib::JsonValue::type_ { JsonType::ISNULL }
private

表示当前对象存储的数据类型,


该类的文档由以下文件生成: