三. JSON数据解析(parse)

三. JSON数据解析(parse)

专栏目录

一. JSON

二. JSON基础数据结构

三. 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. 解析总体流程

2. 类型分辨

3. 数值解析

4. 字符串解析

5. 数组解析

6. 对象解析

参考

[1] 从零开始的 JSON 库教程(四):Unicode - 知乎 (zhihu.com)

[2] Workflow 源码解析 Json parser :part1 parse - 知乎 (zhihu.com)

[3] Unicode字符平面映射 - 维基百科,自由的百科全书 (wikipedia.org)

[4] 字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志 (ruanyifeng.com)

[5] JSON数据类型 (biancheng.net)

posted @ 2023-08-08 11:46  明天咪西什么  阅读(11)  评论(0编辑  收藏  举报