zoukankan      html  css  js  c++  java
  • 开源工具分享:一个月拿下 1.2k Star,自称“最快的 C 语言 JSON 库”

     

    原文 :开源前哨  作者:小秋

    【导语】:符合ANSI标准的C语言json库,其设计的目的是为了更好地利用现代CPU,追求极致的效率。

     

    简介

    YYJSON是一个使用C语言开发的高性能json库,能够更好地利用现代CPU的性能,从而使得JSON的序列化和反序列化都更快。YYJSON具有以下特点:

    1.更快。在现代CPU上,能以每秒千兆级别的速度读取和写入json数据。

    2.可移植。兼容ANSI C(C89)标准。

    3.符合RFC 8259和ECMA-404标准。

    4.完整的JSON格式、数字格式和UTF-8验证。

    5.可以精确处理int64,uint64和double类型的数据。

    6.支持超大数据的JSON读写。

    7.支持注释、尾部逗号、nan/inf,自定义内存分配器。

     

    支持注释,是指能读取写入类似以下的JSON字符串:

    {
       "name": "Harry", // single line comment
       "id": /* multiple line comment */ 123
    }

    支持尾部逗号,是指能读取写入类似以下的JSON字符串:

    {
       "a": 1,
       "b": 2,
    }

    [
       "a",
       "b",
    ]

    支持nan/inf,是指能读取写入类似以下的JSON字符串:

    {
       "large": 123e999,
       "nan1": NaN,
       "nan2": nan,
       "inf1:" Inf,
       "inf2": -Infinity
    }

    8.易用,只需要引入一个h文件和一个c文件。

     

    简单使用

    只需要把yyjson.h和yyjson.c复制到你的项目中就能用了,不需要其他的配置,yyjson的开发团队已经对gcc、clang、msvc、tcc等编译器进行了测试,可以放心使用。

    1、读取JSON字符串:

    const char *json = "{"name":"Mash","star":4,"hits":[2,2,1,3]}";
    yyjson_doc *doc = yyjson_read(json, strlen(json), 0);
    yyjson_val *root = yyjson_doc_get_root(doc);
    yyjson_val *name = yyjson_obj_get(root, "name");
    printf("name: %s ", yyjson_get_str(name));
    yyjson_val *star = yyjson_obj_get(root, "star");
    printf("star: %d ", (int)yyjson_get_int(star));
    yyjson_val *hits = yyjson_obj_get(root, "hits");
    size_t idx, max;
    yyjson_val *hit;
    yyjson_arr_foreach(hits, idx, max, hit) {
       printf("hit%d: %d ", (int)idx, (int)yyjson_get_int(hit));
    }
    yyjson_doc_free(doc);

    2、写入JSON字符串

    yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL);
    yyjson_mut_val *root = yyjson_mut_obj(doc);
    yyjson_mut_doc_set_root(doc, root);
    yyjson_mut_obj_add_str(doc, root, "name", "Mash");
    yyjson_mut_obj_add_int(doc, root, "star", 4);
    int hits_arr[] = {2, 2, 1, 3};
    yyjson_mut_val *hits = yyjson_mut_arr_with_sint32(doc, hits_arr, 4);
    yyjson_mut_obj_add_val(doc, root, "hits", hits);
    const char *json = yyjson_mut_write(doc, 0, NULL);
    if (json) {
       printf("json: %s ", json); // {"name":"Mash","star":4,"hits":[2,2,1,3]}
       free((void *)json);
    }
    yyjson_mut_doc_free(doc);

    3、追求性能和效率,是YYJSON设计出来的主要目的,下面是YYJSON在不同环境下与其他几个JSON库的性能比较,可以看得出来YYJSON在这方面确实是要略胜一筹:

    Intel Core i5-8259U (3.8GHz) with Clang 10

     

     

    Apple A12 (2.5GHz) with Clang 12

     

     

    YYJSON 自称“最快的 C 语言 JSON 库”,在 GitHub 上架刚一个多月,已有 1.2k Star,这是个比较新的项目,有兴趣的同学可以持续关注。

    项目源码及Api文档可在原文查找

     

    如果你也想要自学C语言,接受全面系统的指导。这里有一个交流群推荐给你。不论是小白还是进阶者,在这里都能获得成长。群内含有,学习书籍电子书资源,素材包,还有免费教学课程哦~ 点此进入

     

  • 相关阅读:
    5. java 的类和对象
    java 的变量以及构造方法
    idea运行Test时为啥会运行两次
    MYSQL(三)
    MYSQL(二)
    MySql密码操作
    MYSQL(一)
    【数据结构】2.线性表及其结构
    【数据结构】1.数据结构及算法的入门
    推荐四款可视化工具,解决99%的可视化大屏需求
  • 原文地址:https://www.cnblogs.com/zm131417-/p/14063437.html
Copyright © 2011-2022 走看看