lept_json.h文件
1 #ifndef LEPTJSON_H__
2 #define LEPTJSON_H__
3 //json有六种数据类型:NULL(空),bool(true和false),数字类型,字符串,数组,对象
4 typedef enum { LEPT_NULL, LEPT_FALSE, LEPT_TRUE, LEPT_NUMBER, LEPT_STRING, LEPT_ARRAY, LEPT_OBJECT } lept_type;
5
6 struct lept_member;
7 //json值
8 struct lept_value {
9 union {
10 struct { lept_member* m; size_t size; }o; /* object: members, member count */
11 struct { lept_value* e; size_t size; }a; /* array: elements, element count */
12 struct { char* s; size_t len; }s; /* string: null-terminated string, string length */
13 double n; /* number */
14 }u;
15 lept_type type;
16 };
17
18 struct lept_member {
19 char* k; size_t klen; /* member key string, key string length */
20 lept_value v; /* member value */
21 };
22
23 //解析函数可能的几种返回值
24 enum {
25 LEPT_PARSE_OK = 0, //解析正确
26 LEPT_PARSE_EXPECT_VALUE, //空值或空格符等返回
27 LEPT_PARSE_INVALID_VALUE, //错误的值
28 LEPT_PARSE_ROOT_NOT_SINGULAR, //非单数(错值)
29 LEPT_PARSE_NUMBER_TOO_BIG, //数值型数据超出范围
30 LEPT_PARSE_MISS_QUOTATION_MARK, //缺少引号
31 LEPT_PARSE_INVALID_STRING_ESCAPE, //错误的字符串转义
32 LEPT_PARSE_INVALID_STRING_CHAR, //错误的字符串类型
33 LEPT_PARSE_INVALID_UNICODE_HEX, //Unicode解析十六进制错误
34 LEPT_PARSE_INVALID_UNICODE_SURROGATE, //Unicode解析代理对出错
35 LEPT_PARSE_MISS_COMMA_OR_SQUARE_BRACKET, //缺少逗号或者方括号
36 LEPT_PARSE_MISS_KEY, //缺失键值
37 LEPT_PARSE_MISS_COLON, //缺失冒号
38 LEPT_PARSE_MISS_COMMA_OR_CURLY_BRACKET // 缺失逗号或者大括号
39 };
40
41 #define lept_init(v) do { (v)->type = LEPT_NULL; } while(0)
42
43 //思考:为什么要在头文件中定义接口而在.c或者.cpp文件中实现?
44 //对外接口json解析函数
45 int lept_parse(lept_value* v, const char* json);
46
47 void lept_free(lept_value* v);
48
49 //对外接口获取json值的类型
50 lept_type lept_get_type(const lept_value* v);
51
52 #define lept_set_null(v) lept_free(v)
53
54 //写入操作要考虑内存释放
55 int lept_get_boolean(const lept_value* v);
56 void lept_set_boolean(lept_value* v, int b);
57
58 //对外接口,数值型
59 double lept_get_number(const lept_value* v);
60 void lept_set_number(lept_value* v, double n);
61
62 //对外接口,字符串型
63 const char* lept_get_string(const lept_value* v);
64 size_t lept_get_string_length(const lept_value* v);
65 void lept_set_string(lept_value* v, const char* s, size_t len);
66
67 //对外接口,数组类型值
68 size_t lept_get_array_size(const lept_value* v);
69 lept_value* lept_get_array_element(const lept_value* v, size_t index);
70
71 //对外接口,对象类型
72 size_t lept_get_object_size(const lept_value* v);
73 const char* lept_get_object_key(const lept_value* v, size_t index);
74 size_t lept_get_object_key_length(const lept_value* v, size_t index);
75 lept_value* lept_get_object_value(const lept_value* v, size_t index);
76
77 #endif /* LEPTJSON_H__ */