مكتبة JSON عالية الأداء مكتوبة بلغة ANSI C.
سريع : يمكن قراءة أو كتابة بيانات JSON بالجيجابايت في الثانية على وحدات المعالجة المركزية الحديثة.
محمول : يتوافق مع ANSI C (C89) للتوافق عبر الأنظمة الأساسية.
صارم : يتوافق مع معيار RFC 8259 JSON، مما يضمن تنسيق الأرقام الصارم والتحقق من صحة UTF-8.
قابل للتمديد : يوفر خيارات للسماح بالتعليقات والفواصل الزائدة وNaN/Inf ومخصص الذاكرة المخصص.
الدقة : يمكن قراءة وكتابة int64
و uint64
والأرقام double
بدقة.
مرن : يدعم مستويات تداخل JSON غير محدودة، و u0000
حرف، وسلاسل غير منتهية بقيمة خالية.
المعالجة : يدعم الاستعلام والتعديل باستخدام JSON Pointer وJSON Patch وJSON Merge Patch.
صديق للمطورين : تكامل سهل مع ملف h
واحد وملف c
واحد فقط.
يتم تخزين المصفوفة أو الكائن كبنية بيانات مثل القائمة المرتبطة، مما يجعل الوصول إلى العناصر عن طريق الفهرس أو المفتاح أبطأ من استخدام المكرر.
يُسمح بالمفاتيح المكررة في الكائن، ويتم الحفاظ على ترتيب المفاتيح.
نتيجة تحليل JSON غير قابلة للتغيير، وتتطلب mutable copy
للتعديل.
مشروع المعيار ومجموعة البيانات: yyjson_benchmark
تعد واجهة برمجة التطبيقات On Demand
الجديدة الخاصة بـ simdjson أسرع إذا كانت معظم حقول JSON معروفة في وقت الترجمة. يتحقق هذا المشروع المعياري من واجهة DOM API فقط، وسيتم إضافة معيار جديد لاحقًا.
twitter.json | تحليل (جيجابايت/ثانية) | تبسيط (جيجابايت/ثانية) |
---|---|---|
يجسون (في الموقع) | 1.80 | 1.51 |
yyjson | 1.72 | 1.42 |
simdjson | 1.52 | 0.61 |
ساجون | 1.16 | |
رابيدجسون (الموقع) | 0.77 | |
رابيدجسون (utf8) | 0.26 | 0.39 |
com.cjson | 0.32 | 0.17 |
يانسون | 0.05 | 0.11 |
twitter.json | تحليل (جيجابايت/ثانية) | تبسيط (جيجابايت/ثانية) |
---|---|---|
يجسون (في الموقع) | 3.51 | 2.41 |
yyjson | 2.39 | 2.01 |
simdjson | 2.19 | 0.80 |
ساجون | 1.74 | |
رابيدجسون (الموقع) | 0.75 | |
رابيدجسون (utf8) | 0.30 | 0.58 |
com.cjson | 0.48 | 0.33 |
يانسون | 0.09 | 0.24 |
المزيد من التقارير المعيارية مع الرسوم البيانية التفاعلية (تحديث 2020-12-12)
منصة | وحدة المعالجة المركزية | مترجم | نظام التشغيل | تقرير |
---|---|---|---|---|
إنتل نوك 8i5 | كور i5-8259U | ام اس في سي 2019 | ويندوز 10 2004 | الرسوم البيانية |
إنتل نوك 8i5 | كور i5-8259U | رنة 10.0 | أوبونتو 20.04 | الرسوم البيانية |
إنتل نوك 8i5 | كور i5-8259U | دول مجلس التعاون الخليجي 9.3 | أوبونتو 20.04 | الرسوم البيانية |
AWS EC2 c5a.large | ايه ام دي إبيك 7R32 | دول مجلس التعاون الخليجي 9.3 | أوبونتو 20.04 | الرسوم البيانية |
AWS EC2 t4g.medium | جرافيتون 2 (ARM64) | دول مجلس التعاون الخليجي 9.3 | أوبونتو 20.04 | الرسوم البيانية |
ابل ايفون 12 برو | A14 (ARM64) | رنة 12.0 | دائرة الرقابة الداخلية 14 | الرسوم البيانية |
معالج حديث مزود بـ:
التوازي على مستوى التعليم العالي
توقع فرع ممتاز
عقوبة منخفضة للوصول إلى الذاكرة المنحرفة
مترجم حديث مع مُحسِّن جيد (مثل clang)
const char *json = "{"name": "Mash"، "star": 4، "hits":[2,2,1,3]}";// اقرأ JSON واحصل على rootyyjson_doc *doc = yyjson_read(json , strlen(json), 0);yyjson_val *root = yyjson_doc_get_root(doc);// احصل على الجذر["name"]yyjson_val *name = yyjson_obj_get(root, "name");printf("name: %sn", yyjson_get_str(name));printf("name length:%dn", (int)yyjson_get_len(name));// الحصول على الجذر["star "]yyjson_val *star = yyjson_obj_get(root, "star");printf("star: %dn", (int)yyjson_get_int(star));// الحصول على الجذر["hits"]، والتكرار عبر arrayyyjson_val *hits = yyjson_obj_get(root, "hits");size_t idx, max;yyjson_val *hit;yyjson_arr_foreach(hits, idx, الحد الأقصى، ضرب) {printf("hit%d: %dn"، (int)idx, (int)yyjson_get_int(hit)); }// حرر docyyjson_doc_free(doc);// تقبل جميع الوظائف الإدخال NULL، وترجع NULL عند حدوث خطأ.
// إنشاء docyyjson_mut_doc قابل للتغيير *doc = yyjson_mut_doc_new(NULL);yyjson_mut_val *root = yyjson_mut_obj(doc);yyjson_mut_doc_set_root(doc, root);// تعيين الجذر["name"] و root["star"]yyjson_mut_obj_add_str(doc, root, "name", "Mash");yyjson_mut_obj_add_int(doc, root, "star", 4);// تعيين الجذر["hits"] باستخدام مصفوفة 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);// إلى السلسلة، miniifiedconst char *json = yyjson_mut_write(doc, 0, NULL);if (json) {printf("json" : %sn"، json)؛ // {"name": "Mash"، "star": 4، "hits":[2،2،1،3]}free((void *)json); }// حرر docyyjson_mut_doc_free(doc);
// قراءة ملف JSON، مع السماح بالتعليقات والتعليقات اللاحقة commasyyjson_read_flag flg = YYJSON_READ_ALLOW_COMMENTS | YYJSON_READ_ALLOW_TRAILING_COMMAS;yyjson_read_err err;yyjson_doc *doc = yyjson_read_file("/tmp/config.json", flg, NULL, &err);// التكرار عبر الكائن الجذر (doc) {yyjson_val *obj = yyjson_doc_get_root(doc);yyjson_obj_iter iter;yyjson_obj_iter_init(obj, &iter);yyjson_val *key, *val;while ((key = yyjson_obj_iter_next(&iter))) {val = yyjson_obj_iter_get_val(key);printf("%s: %sn"، yyjson_get_str(مفتاح)، yyjson_get_type_desc(val)); } } else {printf("قراءة الخطأ (%u): %s في الموضع: %ldn"، err.code, err.msg, err.pos); }// حرر docyyjson_doc_free(doc);
// اقرأ ملف JSON كملف docyyjson_doc قابل للتغيير *idoc = yyjson_read_file("/tmp/config.json"، 0, NULL, NULL);yyjson_mut_doc *doc = yyjson_doc_mut_copy(idoc, NULL);yyjson_mut_val *obj = yyjson_mut_doc_get_root(doc);// إزالة القيم الخالية في الكائن الجذرyyjson_mut_obj_iter iter;yyjson_mut_obj_iter_init(obj, &iter);yyjson_mut_val *key, *val;while ((key = yyjson_mut_obj_iter_next(&iter))) {val = yyjson_mut_obj_iter_get_val(key);if (yyjson_mut_is_null(val)) {yyjson_mut_obj_iter_remove(&iter); } }// اكتب json جميلًا، واهرب unicodeyyjson_write_flag flg = YYJSON_WRITE_PRETTY | YYJSON_WRITE_ESCAPE_UNICODE;yyjson_write_err err;yyjson_mut_write_file("/tmp/config.json", doc, flg, NULL, &err);if (err.code) {printf("خطأ الكتابة (%u): %sn", err.code, err.msg); }// حرر docyyjson_doc_free(idoc);yyjson_mut_doc_free(doc);
يمكن الوصول إلى أحدث الوثائق (التي لم يتم إصدارها) في دليل المستندات. يمكن الاطلاع على Doxygen HTML الذي تم إنشاؤه مسبقًا لإصدار الإصدار هنا:
الصفحة الرئيسية
بناء واختبار
API ونموذج التعليمات البرمجية
بنية البيانات
سجل التغيير
قائمة غير شاملة للمشاريع التي تعرض yyjson للغات أخرى أو تستخدم yyjson داخليًا لميزة رئيسية. إذا كان لديك مشروع يستخدم yyjson، فلا تتردد في فتح PR لإضافته إلى هذه القائمة.
مشروع | لغة | وصف |
---|---|---|
py_yyjson | بايثون | روابط بايثون لـ yyjson |
com.orjson | بايثون | مكتبة JSON لـ Python مع واجهة خلفية yyjson اختيارية |
cpp-yyjson | سي ++ | مكتبة C++ JSON ذات الواجهة الخلفية yyjson |
تعكس CPP | سي ++ | مكتبة C++ للتسلسل من خلال الاسترداد الآلي لاسم الحقل من البنيات |
yyjsonr | ر | R ملزمة لـ yyjson |
أناندا | سويفت | فك تشفير نموذج JSON بناءً على yyjson |
com.duckdb | سي ++ | DuckDB هو نظام إدارة قاعدة بيانات SQL OLAP قيد التشغيل |
com.fastfetch | ج | أداة تشبه neofetch لجلب معلومات النظام وعرضها بطريقة جميلة |
زريثم | ج | محطة عمل الصوت الرقمي التي تستخدم yyjson لتسلسل ملفات مشروع JSON |
bemorehuman | ج | محرك التوصية مع التركيز على تفرد الشخص الذي يتلقى التوصية |
mruby-yyjson | مروبي | مكتبة تحليل وتسلسل JSON فعالة لـ mruby باستخدام yyjson |
YYJSON.jl | جوليا | روابط جوليا لـ yyjson |
إضافة صفحة الوثائق.
أضف سير عمل GitHub لـ CI وcodecov.
إضافة المزيد من الاختبارات: فالجريند، المطهر، التشويش.
دعم مؤشر JSON للاستعلام وتعديل JSON.
أضف نوع RAW
للقارئ والكاتب JSON.
إضافة خيار للحد من دقة إخراج الرقم الحقيقي.
إضافة خيار لدعم JSON5 (إن أمكن).
أضف وظائف لتمييز مستندين JSON.
أضف وثائق حول تحسينات الأداء.
ضمان استقرار ABI.
تم إصدار هذا المشروع بموجب ترخيص MIT.