三. JSON数据解析(parse)
三. JSON数据解析(parse)
专栏目录
0. 引
我们现在已经将JSON的基础数据结构进行了C语言抽象了, 就像已经准备好了房子, 就等着入住了, 一般来说, JSON数据是以字符串形式由外部传入的, 被解析的对象就是这个JSON格式的字符串.
#include "list.h" #include "rbtree.h" #define JSON_VALUE_STRING 1 #define JSON_VALUE_NUMBER 2 #define JSON_VALUE_OBJECT 3 #define JSON_VALUE_ARRAY 4 #define JSON_VALUE_TRUE 5 #define JSON_VALUE_FALSE 6 #define JSON_VALUE_NULL 7 typedef struct __json_value json_value_t; typedef struct __json_object json_object_t; typedef struct __json_array json_array_t; typedef struct __json_member json_member_t; typedef struct __json_element json_element_t; struct __json_value { int type; union { char *string; double number; json_object_t object; json_array_t array; } value; }; struct __json_array { int size; struct list_head head; }; struct __json_element { struct list_head list; json_value_t value; }; struct __json_object { int size; struct list_head head; struct rb_root root; }; struct __json_member { struct list_head list; struct rb_node node; char key[1]; json_value_t value; };
为了解析JSON格式的字符串, 我们需要有一个函数, 入参是一个字符串, 出参当然就是json结构体, 这个函数的声明应该是这样:
json_value_t *json_value_parse(const char *jsonStr);
jsonStr
就是需要解析的JSON格式的字符串,json_value_t
就是我们需要的解析出来的JSON对象.
接下来, 让我们一步一步得来实现它.
章节目录
参考
[1] 从零开始的 JSON 库教程(四):Unicode - 知乎 (zhihu.com)
[2] Workflow 源码解析 Json parser :part1 parse - 知乎 (zhihu.com)
[3] Unicode字符平面映射 - 维基百科,自由的百科全书 (wikipedia.org)
[4] 字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志 (ruanyifeng.com)