🛰️航天仿真算法库 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
23AST_NAMESPACE_BEGIN
24
25class JsonValue;
26class JsonSax;
27
29class AST_UTIL_API JsonParser
30{
31public:
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
37private:
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
81AST_NAMESPACE_END
JSON 解析器
定义 JsonParser.hpp:30
定义 JsonSax.hpp:34
JSON 值类
定义 JsonValue.hpp:47