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);
158 JsonType
type() const noexcept {
return type_; }
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;
238 JsonValue(
const int& num)
noexcept: type_(JsonType::NUMBER) {
239 content_ = std::to_string(num);
244 JsonValue(
const long long& num)
noexcept: type_(JsonType::NUMBER) {
245 content_ = std::to_string(num);
250 JsonValue(
const double& num)
noexcept: type_(JsonType::NUMBER) {
251 content_ = std::to_string(num);
256 JsonValue(
const long double& num)
noexcept: type_(JsonType::NUMBER) {
257 content_ = std::to_string(num);
302 type_ = JsonType::BOOL;
310 type_ = JsonType::NUMBER;
311 content_ = std::to_string(num);
318 type_ = JsonType::NUMBER;
319 content_ = std::to_string(num);
326 type_ = JsonType::NUMBER;
327 content_ = std::to_string(num);
334 type_ = JsonType::NUMBER;
335 content_ = std::to_string(num);
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;
390 bool is_object() const noexcept {
return type_ == JsonType::OBJECT; }
396 bool is_array() const noexcept {
return type_ == JsonType::ARRAY; }
402 bool is_string() const noexcept {
return type_ == JsonType::STRING; }
408 bool is_bool() const noexcept {
return type_ == JsonType::BOOL; }
414 bool is_number() const noexcept {
return type_ == JsonType::NUMBER; }
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; }
432 bool is_null() const noexcept {
return type_ == JsonType::ISNULL; }
438 bool is_value() const noexcept {
return type_ != JsonType::OBJECT && type_ != JsonType::ARRAY; }
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(const std::string &message)
带异常描述文本的构造函数。
JsonStructureException()
默认构造函数。
JsonStructureException(const std::string &message)
带异常描述文本的构造函数。
JsonTypeException(const std::string &message)
带异常描述文本的构造函数。
JsonTypeException()
默认构造函数。
JsonValue(const std::nullptr_t &) noexcept
nullptr_t类型构造
JsonValue & operator=(const bool &bl) noexcept
布尔类型赋值
bool is_array() const noexcept
判断是不是数组
bool is_string() const noexcept
判断是不是字符串
JsonValue(const long long &num) noexcept
长整数类型构造
JsonValue(const int &num) noexcept
整数类型构造
JsonValue & operator=(const long double &num) noexcept
浮点数类型赋值
bool is_value() const noexcept
判断是不是值类型
void reset() noexcept
重置,设为null值
JsonValue(const long double &num) noexcept
浮点数类型构造
bool is_bool() const noexcept
判断是不是布尔
JsonValue & operator=(const int &num) noexcept
整数类型赋值
bool is_number() const noexcept
判断是不是数值
JsonValue(const double &num) noexcept
浮点数类型构造
bool is_int64() const noexcept
判断是不是整数
JsonValue & operator=(const double &num) noexcept
浮点数类型赋值
std::variant< bool, std::string, JsonObject, JsonArray > JsonVar
bool is_null() const noexcept
判断是不是null
JsonValue & operator=(const long long &num) noexcept
长整数类型赋值
JsonValue & operator=(const std::nullptr_t &) noexcept
null类型赋值
JsonType type() const noexcept
获取当前对象数据类型
bool is_double() const noexcept
判断是不是浮点
std::map< std::string, JsonValue > JsonObject
JsonObject类型
JsonValue deserialize(std::string_view str)
反序列化函数
std::vector< JsonValue > JsonArray
JsonArray类型