• 大小: 23.54MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-28
  • 语言: 其他
  • 标签: C/C  

资源简介

zzzJSON是一个纯C实现的JSON解析器,代码朴素,注释丰富,简单易懂,拥有极致的JSON解析和序列化速度,提供对JSON数据的读写功能,同时,仅依赖glibc且所有代码均包含在一个头文件中,使用极其方便

资源截图

代码片段和文件信息

#include “../../zzzjson.h“
#include 

// 深复制函数,这里命名为GetAndSet更直观
void GetAndSet(Value *srcv Value *desv)
{
    // 获取值的类型
    const JSONType *t;
    t = Type(srcv);
    if (t == 0)
        return;
    switch (*t)
    {
    case JSONTYPEARRAY:
    {
        // 如果是数组,则把当前值设为数组,然后遍历并复制数组中的每个值
        SetArray(desv);
        Value *next = Begin(srcv);
        while (next != 0)
        {
            Value *v = NewValue(desv->A);
            GetAndSet(next v);
            if (ArrayAddFast(desv v) != True)
                return;
            next = Next(next);
        }
        break;
    }
    case JSONTYPEobject:
    {
        // 如果是对象,则把当前值设为对象,然后遍历并复制对象中的每个值
        SetObj(desv);
        Value *next = Begin(srcv);
        while (next != 0)
        {
            Value *v = NewValue(desv->A);
            SetKeyFast(v GetKey(next));
            GetAndSet(next v);
            if (ObjAddFast(desv v) != True)
                return;
            next = Next(next);
        }
        break;
    }
    case JSONTYPEBOOL:
    {
        // 如果是布尔值,则获取并复制该值
        const zzz_BOOL *b = GetBool(srcv);
        if (b == 0)
            return;
        SetBool(desv *b);
        break;
    }
    case JSONTYPENULL:
    {
        // 如果是空,则复制该值
        if (IsNull(srcv) == False)
            return;
        SetNull(desv);
        break;
    }

    case JSONTYPESTRING:
    {
        // 如果是字符串,则获取并复制该字符串
        const char *str = GetStr(srcv);
        if (str == 0)
            return;
        // 如果需要拷贝字符串,则需要使用SetStr
        if (SetStrFast(desv str) != True)
            return;
        break;
    }
    case JSONTYPENUMBER:
    {
        // 如果是数字,则获取并复制该数字
        const char *str = GetNumStr(srcv);
        if (str == 0)
            return;
        // 如果需要拷贝数字,则需要使用SetNumStr
        if (SetNumStrFast(desv str) != True)
            return;
        break;
    }
    }
}
int main()
{
    const char *src_json = “[{\“key\“:true}false{\“key1\“:true}[nullfalse[]true][\“\“123\“str\“]null]“;
    // 创建一个内存分配器
    Allocator *A = NewAllocator();
    // 创建两个值
    Value *src_v = NewValue(A);
    Value *des_v = NewValue(A);
    // 解析JSON文本
    BOOL ret = ParseFast(src_v src_json);
    if (ret != True)
    {
        printf(“ParseFast Fail!\n“);
        return 1;
    }
    // 深复制
    GetAndSet(src_v des_v);
    // 序列化
    const char *des_json = Stringify(des_v);
    printf(“src_json:%s\n“ src_json);
    if (des_json != 0)
        printf(“des_json:%s\n“ des_json);
    // 释放内存
    ReleaseAllocator(A);
    return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-04-18 03:40  zzzjson-master\
     文件         199  2019-04-18 03:40  zzzjson-master\.gitattributes
     文件         401  2019-04-18 03:40  zzzjson-master\.gitignore
     文件       19332  2019-04-18 03:40  zzzjson-master\README.md
     文件       86280  2019-04-18 03:40  zzzjson-master\READMECHN.md
     目录           0  2019-04-18 03:40  zzzjson-master\beta\
     文件       75722  2019-04-18 03:40  zzzjson-master\beta\zzzjson_beta.h
     文件        5736  2019-04-18 03:40  zzzjson-master\build.sh
     目录           0  2019-04-18 03:40  zzzjson-master\resource\
     文件      120037  2019-04-18 03:40  zzzjson-master\resource\zzzJSON.jpg
     目录           0  2019-04-18 03:40  zzzjson-master\sample\
     目录           0  2019-04-18 03:40  zzzjson-master\sample\c++\
     文件        3115  2019-04-18 03:40  zzzjson-master\sample\c++\sample.cpp
     目录           0  2019-04-18 03:40  zzzjson-master\sample\c\
     文件        2928  2019-04-18 03:40  zzzjson-master\sample\c\sample.c
     目录           0  2019-04-18 03:40  zzzjson-master\sample\go\
     文件         456  2019-04-18 03:40  zzzjson-master\sample\go\sample.go
     目录           0  2019-04-18 03:40  zzzjson-master\test\
     目录           0  2019-04-18 03:40  zzzjson-master\test\conformance\
     文件       10940  2019-04-18 03:40  zzzjson-master\test\conformance\conformance_test.cpp
     目录           0  2019-04-18 03:40  zzzjson-master\test\conformance\data\
     目录           0  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\
     文件          31  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail1.json
     文件          58  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail10.json
     文件          29  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail11.json
     文件          31  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail12.json
     文件          43  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail13.json
     文件          31  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail14.json
     文件          34  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail15.json
     文件           8  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail16.json
     文件          34  2019-04-18 03:40  zzzjson-master\test\conformance\data\jsonchecker\fail17.json
............此处省略638个文件信息

评论

共有 条评论