1. 解析总体流程

发布时间 2023-08-08 11:47:55作者: 明天咪西什么

1. 解析总体流程

JSON格式从整体而言, 是一个相对简单的结构, 因为它总共就只有六种数据类型, 只需要做好三个大的步骤就行了.

  1. 跳过空格: JSON的标准允许JSON的字符串中穿插空格, 为了解析, 我们需要先把无关的空格跳过, 只解析有用的部分.
  2. 类型分辨: 不同的类型有不同的解析方式, 需要先判断传入的JSON数据的类型, 再进行解析.
  3. 分类解析: 根据不同的类型, 进行对应的解析.
json_value_t *json_value_parse(const char *jsonStr)
{
    json_value_t *value = NULL;
    int ret;

    if (jsonStr == NULL)
    {
        return NULL;
    }

    while (isspace(*jsonStr))
    {
        jsonStr++;
    }

    ret = __parse_json_value(jsonStr, value);
    if (ret < 0)
    {
        return NULL;
    }

    return value;
}

这个代码实现了上面说的两个步骤

通过while循环来跳过为空格的字符, __parse_json_value​这个函数就是解析的核心.

这里来看看__parse_json_value​函数, 原型: ​int __parse_json_value(const char *jsonStr, json_value_t *value)​, 很好理解, 入参是JSON字符串, 出参是解析后的json_value_t​的结构体和int类型的错误码. 解析JSON的重点就是实现这个函数.

这个函数先暂且这样写, 不代表是这个函数最终的实现, 目前看来只需要这些参数就可以了, 后面还会增加.

参考

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