乐趣区

关于ide:一个月拿下-12k-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 文件。

简略应用

我的项目源码:

https://github.com/ibireme/yy…

Api 文档:

https://github.com/ibireme/yy…

只须要把 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\n", yyjson_get_str(name));
yyjson_val *star = yyjson_obj_get(root, "star");
printf("star: %d\n", (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\n", (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\n", 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,这是个比拟新的我的项目,有趣味的同学能够继续关注。

开源前哨 日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

退出移动版