🛰️航天仿真算法库 SpaceAST
0.0.1
载入中...
搜索中...
未找到
JsonParser.hpp
浏览该文件的文档.
1
8
9
#pragma once
10
11
#include "AstGlobal.h"
12
#include "AstUtil/BaseParser.hpp"
13
#include "AstUtil/JsonSax.hpp"
// 为解析函数引入 JsonSax 完整定义
14
#include <string>
15
#include <vector>
16
#include <cstdio>
17
#include <cstdlib>
// strtod, strtol
18
#include <cerrno>
19
#include <cstring>
20
#include <cctype>
21
#include <algorithm>
22
23
AST_NAMESPACE_BEGIN
24
25
class
JsonValue;
26
class
JsonSax;
27
29
class
AST_UTIL_API
JsonParser
30
{
31
public
:
32
errc_t parseFromString(
StringView
json,
JsonValue
& value);
33
errc_t parseFromFile(
StringView
file,
JsonValue
& value);
34
errc_t parseFromString(
StringView
json,
JsonSax
& sax);
35
errc_t parseFromFile(
StringView
file,
JsonSax
& sax);
36
37
private
:
38
// ---- 缓冲区与游标 ----
39
std::vector<char> buffer_;
40
size_t
currentPos_{0};
41
42
// ---- 文件读取 ----
44
errc_t readFile(
StringView
filepath);
45
46
// ---- 低层字符操作 ----
48
void
skipWhitespace();
49
51
char
peek()
const
;
52
54
char
next();
55
57
bool
expect(
char
c,
JsonSax
& sax);
58
59
// ---- 递归下降解析 ----
60
errc_t parseValue(
JsonSax
& sax);
61
errc_t parseObject(
JsonSax
& sax);
62
errc_t parseArray(
JsonSax
& sax);
63
errc_t parseString(
JsonSax
& sax,
bool
isKey);
64
errc_t parseNumber(
JsonSax
& sax);
65
67
errc_t parseLiteral(
const
char
* literal,
size_t
len,
JsonSax
& sax);
68
// 由于 bool 回调需要参数,这里重载
69
errc_t parseLiteralBool(
bool
value,
JsonSax
& sax);
70
71
// ---- Unicode 辅助 ----
73
static
void
appendUtf8(std::string& out,
unsigned
int
codepoint);
74
76
unsigned
int
parseHex4();
77
};
78
81
AST_NAMESPACE_END
ast::JsonParser
JSON 解析器
定义
JsonParser.hpp:30
ast::JsonSax
定义
JsonSax.hpp:34
ast::JsonValue
JSON 值类
定义
JsonValue.hpp:47
ast::StringViewBasic< char >
src
AstUtil
ParseFormat
Json
JsonParser.hpp
制作者
1.12.0