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__ */

猜你喜欢

转载自www.cnblogs.com/Royzzzzz/p/12789856.html