三. 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix