2#ifndef MYSVAC_CPP_JSONLIB_H
3#define MYSVAC_CPP_JSONLIB_H
5#include <initializer_list>
15 #define JSONLIB_EXPORT
50 explicit JsonException(
const std::string& message) : std::runtime_error(message) {}
120 using JsonVar = std::variant<bool, std::string, JsonObject, JsonArray>;
131 JsonType
type_ { JsonType::ISNULL };
139 JsonValue(std::string_view str, std::string_view::const_iterator& it);
150 JsonValue(
const std::initializer_list<JsonValue>& init_list);
165 type_ = JsonType::ISNULL;
174 void clear() noexcept;
182 size_t size() const noexcept;
194 explicit
JsonValue(const JsonType& jsonType);
202 JsonValue(std::string_view str) noexcept;
210 JsonValue& operator=(std::string_view str);
227 JsonValue& operator=(const
char* str) noexcept;
302 type_ = JsonType::BOOL;
310 type_ = JsonType::NUMBER;
318 type_ = JsonType::NUMBER;
326 type_ = JsonType::NUMBER;
334 type_ = JsonType::NUMBER;
342 type_ = JsonType::ISNULL;
374 std::string serialize() const noexcept;
384 std::
string serialize_pretty(const
size_t& space_num = 2,const
size_t& depth = 0) const noexcept;
420 bool is_int64() const noexcept {
return type_ == JsonType::NUMBER && std::get<std::string>(
content_).find(
'.') == std::string::npos; }
426 bool is_double() const noexcept {
return type_ == JsonType::NUMBER && std::get<std::string>(
content_).find(
'.') != std::string::npos; }
446 long long as_int64()
const;
453 double as_double()
const;
460 long double as_ldouble()
const;
467 bool as_bool()
const;
475 std::string as_string()
const;
533 JsonValue& operator[](
const size_t& index);
540 JsonValue& operator[](
const std::string& key);
547 bool hasKey(
const std::string& key)
const noexcept;
555 void push_back(
const JsonValue& jsonBasic);
575 void insert(
const size_t& index,
const JsonValue& jsonBasic);
581 void insert(
const size_t& index,
JsonValue&& jsonBasic);
587 void insert(
const std::string& key,
const JsonValue& jsonBasic);
593 void insert(
const std::string& key,
JsonValue&& jsonBasic);
603 void erase(
const size_t& index);
610 void erase(
const std::string& key);
JsonException()
默认构造函数。
定义 jsonlib.h:45
JsonException(const std::string &message)
带异常描述文本的构造函数。
定义 jsonlib.h:50
JsonStructureException()
默认构造函数。
定义 jsonlib.h:81
JsonStructureException(const std::string &message)
带异常描述文本的构造函数。
定义 jsonlib.h:86
JsonTypeException(const std::string &message)
带异常描述文本的构造函数。
定义 jsonlib.h:68
JsonTypeException()
默认构造函数。
定义 jsonlib.h:63
Json数据通用类
定义 jsonlib.h:118
JsonValue(const std::nullptr_t &) noexcept
nullptr_t类型构造
定义 jsonlib.h:262
bool is_object() const noexcept
判断是不是对象
定义 jsonlib.h:390
JsonValue & operator=(const bool &bl) noexcept
布尔类型赋值
定义 jsonlib.h:301
bool is_array() const noexcept
判断是不是数组
定义 jsonlib.h:396
bool is_string() const noexcept
判断是不是字符串
定义 jsonlib.h:402
JsonValue(const long long &num) noexcept
长整数类型构造
定义 jsonlib.h:244
JsonValue(const int &num) noexcept
整数类型构造
定义 jsonlib.h:238
JsonValue & operator=(const long double &num) noexcept
浮点数类型赋值
定义 jsonlib.h:333
JsonVar content_
存储JSON数据。
定义 jsonlib.h:126
JsonType type_
表示当前对象存储的数据类型,
定义 jsonlib.h:131
JsonValue(std::string_view str, std::string_view::const_iterator &it)
反序列化构造函数
定义 jsonlib.cpp:294
bool is_value() const noexcept
判断是不是值类型
定义 jsonlib.h:438
void reset() noexcept
重置,设为null值
定义 jsonlib.h:164
JsonValue(const long double &num) noexcept
浮点数类型构造
定义 jsonlib.h:256
bool is_bool() const noexcept
判断是不是布尔
定义 jsonlib.h:408
JsonValue & operator=(const int &num) noexcept
整数类型赋值
定义 jsonlib.h:309
bool is_number() const noexcept
判断是不是数值
定义 jsonlib.h:414
JsonValue(const double &num) noexcept
浮点数类型构造
定义 jsonlib.h:250
bool is_int64() const noexcept
判断是不是整数
定义 jsonlib.h:420
JsonValue & operator=(const double &num) noexcept
浮点数类型赋值
定义 jsonlib.h:325
std::variant< bool, std::string, JsonObject, JsonArray > JsonVar
定义 jsonlib.h:120
bool is_null() const noexcept
判断是不是null
定义 jsonlib.h:432
JsonValue & operator=(const long long &num) noexcept
长整数类型赋值
定义 jsonlib.h:317
JsonValue & operator=(const std::nullptr_t &) noexcept
null类型赋值
定义 jsonlib.h:341
JsonType type() const noexcept
获取当前对象数据类型
定义 jsonlib.h:158
bool is_double() const noexcept
判断是不是浮点
定义 jsonlib.h:426
#define JSONLIB_EXPORT
定义 jsonlib.h:15
std::map< std::string, JsonValue > JsonObject
JsonObject类型
定义 jsonlib.h:96
std::vector< JsonValue > JsonArray
JsonArray类型
定义 jsonlib.h:102
JSONLIB_EXPORT JsonValue deserialize(std::string_view str)
反序列化函数
定义 jsonlib.cpp:275