mysvac-jsonlib 2.1.0
一个轻量高效的C++17 JSON解析库
 
载入中...
搜索中...
未找到
jsonlib.h
浏览该文件的文档.
1#pragma once
2#ifndef MYSVAC_CPP_JSONLIB_H
3#define MYSVAC_CPP_JSONLIB_H
4
5#include <initializer_list>
6#include <string>
7#include <string_view>
8#include <map>
9#include <vector>
10#include <variant>
11#include <exception>
12#include <stdexcept>
13
14#ifndef JSONLIB_EXPORT
15 #define JSONLIB_EXPORT
16#endif
17
18
19namespace Jsonlib{
24 enum class JSONLIB_EXPORT JsonType{
31 };
32
33
40 class JSONLIB_EXPORT JsonException : public std::runtime_error {
41 public:
45 JsonException() : std::runtime_error("Unknown JSON Exception.\n") {}
46
50 explicit JsonException(const std::string& message) : std::runtime_error(message) {}
51 };
52
59 public:
63 JsonTypeException() : JsonException("Unknown JSON Type Exception.\n") {}
64
68 explicit JsonTypeException(const std::string& message) : JsonException(message) {}
69 };
70
77 public:
81 JsonStructureException() : JsonException("Unknown Json Structure.\n") {}
82
86 explicit JsonStructureException(const std::string& message) : JsonException(message) {}
87 };
88
89
90 class JsonValue;
91
96 using JsonObject = std::map<std::string,JsonValue>;
97
102 using JsonArray = std::vector<JsonValue>;
103
110 JsonValue deserialize(std::string_view str);
111
119 private:
120 using JsonVar = std::variant<bool, std::string, JsonObject, JsonArray>;
126 JsonVar content_ { false };
127
131 JsonType type_ { JsonType::ISNULL };
132
133 public:
139 JsonValue(std::string_view str, std::string_view::const_iterator& it);
140
150 JsonValue(const std::initializer_list<JsonValue>& init_list);
151
152
157 [[nodiscard]]
158 JsonType type() const noexcept { return type_; }
159
164 void reset() noexcept {
165 type_ = JsonType::ISNULL;
166 content_ = false;
167 }
168
174 void clear() noexcept;
175
181 [[nodiscard]]
182 size_t size() const noexcept;
183
188 JsonValue() = default;
189
194 explicit JsonValue(const JsonType& jsonType);
195
202 JsonValue(std::string_view str) noexcept;
203
210 JsonValue& operator=(std::string_view str);
211
212
219 JsonValue(const char* str) noexcept;
220
227 JsonValue& operator=(const char* str) noexcept;
228
232 JsonValue(const bool& bl) noexcept: type_(JsonType::BOOL) {
233 content_ = bl;
234 }
235
238 JsonValue(const int& num) noexcept: type_(JsonType::NUMBER) {
239 content_ = std::to_string(num);
240 }
241
244 JsonValue(const long long& num) noexcept: type_(JsonType::NUMBER) {
245 content_ = std::to_string(num);
246 }
247
250 JsonValue(const double& num) noexcept: type_(JsonType::NUMBER) {
251 content_ = std::to_string(num);
252 }
253
256 JsonValue(const long double& num) noexcept: type_(JsonType::NUMBER) {
257 content_ = std::to_string(num);
258 }
259
262 JsonValue(const std::nullptr_t&) noexcept{}
263
267 JsonValue(const JsonArray& jsonArray) noexcept;
271 JsonValue(JsonArray&& jsonArray) noexcept;
275 JsonValue(const JsonObject& jsonObject) noexcept;
279 JsonValue(JsonObject&& jsonObject) noexcept;
280
284 JsonValue& operator=(const JsonArray& jsonArray) noexcept;
288 JsonValue& operator=(JsonArray&& jsonArray) noexcept;
292 JsonValue& operator=(const JsonObject& jsonObject) noexcept;
296 JsonValue& operator=(JsonObject&& jsonObject) noexcept;
297
301 JsonValue& operator=(const bool& bl) noexcept {
302 type_ = JsonType::BOOL;
303 content_ = bl;
304 return *this;
305 }
306
309 JsonValue& operator=(const int& num) noexcept {
310 type_ = JsonType::NUMBER;
311 content_ = std::to_string(num);
312 return *this;
313 }
314
317 JsonValue& operator=(const long long& num) noexcept{
318 type_ = JsonType::NUMBER;
319 content_ = std::to_string(num);
320 return *this;
321 }
322
325 JsonValue& operator=(const double& num) noexcept {
326 type_ = JsonType::NUMBER;
327 content_ = std::to_string(num);
328 return *this;
329 }
330
333 JsonValue& operator=(const long double& num) noexcept{
334 type_ = JsonType::NUMBER;
335 content_ = std::to_string(num);
336 return *this;
337 }
338
341 JsonValue& operator=(const std::nullptr_t& ) noexcept{
342 type_ = JsonType::ISNULL;
343 content_ = false;
344 return *this;
345 }
346
350 JsonValue(const JsonValue& jsonValue) noexcept;
351
355 JsonValue(JsonValue&& jsonValue) noexcept;
356
360 JsonValue& operator=(const JsonValue& jsonValue) noexcept;
361
365 JsonValue& operator=(JsonValue&& jsonValue) noexcept;
366
373 [[nodiscard]]
374 std::string serialize() const noexcept;
375
383 [[nodiscard]]
384 std::string serialize_pretty(const size_t& space_num = 2,const size_t& depth = 0) const noexcept;
385
389 [[nodiscard]]
390 bool is_object() const noexcept { return type_ == JsonType::OBJECT; }
391
395 [[nodiscard]]
396 bool is_array() const noexcept { return type_ == JsonType::ARRAY; }
397
401 [[nodiscard]]
402 bool is_string() const noexcept { return type_ == JsonType::STRING; }
403
407 [[nodiscard]]
408 bool is_bool() const noexcept { return type_ == JsonType::BOOL; }
409
413 [[nodiscard]]
414 bool is_number() const noexcept { return type_ == JsonType::NUMBER; }
415
419 [[nodiscard]]
420 bool is_int64() const noexcept { return type_ == JsonType::NUMBER && std::get<std::string>(content_).find('.') == std::string::npos; }
421
425 [[nodiscard]]
426 bool is_double() const noexcept { return type_ == JsonType::NUMBER && std::get<std::string>(content_).find('.') != std::string::npos; }
427
431 [[nodiscard]]
432 bool is_null() const noexcept { return type_ == JsonType::ISNULL; }
433
437 [[nodiscard]]
438 bool is_value() const noexcept { return type_ != JsonType::OBJECT && type_ != JsonType::ARRAY; }
439
445 [[nodiscard]]
446 long long as_int64() const;
452 [[nodiscard]]
453 double as_double() const;
459 [[nodiscard]]
460 long double as_ldouble() const;
466 [[nodiscard]]
467 bool as_bool() const;
468
474 [[nodiscard]]
475 std::string as_string() const;
476
483 JsonObject& as_object();
484
491 [[nodiscard]]
492 const JsonObject& as_object() const;
493
500 JsonArray& as_array();
501
508 [[nodiscard]]
509 const JsonArray& as_array() const;
510
518 JsonValue& at(const size_t& index);
526 JsonValue& at(const std::string& key);
533 JsonValue& operator[](const size_t& index);
540 JsonValue& operator[](const std::string& key);
541
546 [[nodiscard]]
547 bool hasKey(const std::string& key) const noexcept;
548
549
555 void push_back(const JsonValue& jsonBasic);
556
562 void push_back(JsonValue&& jsonBasic);
563
569 void pop_back();
570
575 void insert(const size_t& index, const JsonValue& jsonBasic);
576
581 void insert(const size_t& index, JsonValue&& jsonBasic);
582
587 void insert(const std::string& key,const JsonValue& jsonBasic);
588
593 void insert(const std::string& key,JsonValue&& jsonBasic);
594
595
603 void erase(const size_t& index);
610 void erase(const std::string& key);
611 };
612
613}
614
615#endif
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
NUMBER
定义 jsonlib.h:28
ARRAY
定义 jsonlib.h:26
BOOL
定义 jsonlib.h:29
OBJECT
定义 jsonlib.h:25
#define JSONLIB_EXPORT
定义 jsonlib.h:15
ISNULL
定义 jsonlib.h:30
STRING
定义 jsonlib.h:27
定义 jsonlib.h:19
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