UltraJSON هو برنامج تشفير وفك تشفير JSON فائق السرعة مكتوب بلغة C النقية مع روابط لـ Python 3.9+.
التثبيت بالنقطة:
python -m pip install ujson
تحذير
إن بنية UltraJSON غير مناسبة بشكل أساسي لإجراء تغييرات دون التعرض لخطر إدخال ثغرات أمنية جديدة. ونتيجة لذلك، تم وضع هذه المكتبة في وضع الصيانة فقط . ستتم إضافة الدعم لإصدارات Python الجديدة وسيتم إصلاح الأخطاء الحرجة والمشكلات الأمنية ولكن سيتم رفض جميع التغييرات الأخرى. يتم تشجيع المستخدمين على الانتقال إلى orjson، وهو أسرع بكثير وأقل احتمالاً لإدخال ثغرة أمنية مفاجئة في سعة المخزن المؤقت في المستقبل.
يمكن استخدامه كبديل لمعظم موزعي JSON الآخرين لـ Python:
>>> import ujson
>>> ujson.dumps([{ " key " : " value " }, 81 , True ])
'[{"key":"value"},81,true]'
>>> ujson.loads( """ [{"key": "value"}, 81, true] """ )
[{'key': 'value'}, 81, True]
يُستخدم لتمكين التشفير الخاص لأحرف HTML "غير الآمنة" في تسلسلات Unicode أكثر أمانًا. الافتراضي False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
يحد الإخراج من ASCII ويتجنب كافة الأحرف الموسعة فوق 127. الافتراضي هو True
. إذا كان التنسيق النهائي الخاص بك يدعم UTF-8، يوصى بشدة بتعيين هذا الخيار على false لتوفير المساحة:
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
التحكم في ما إذا كان سيتم تخطي الخطوط المائلة للأمام ( /
). الافتراضي True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
يتحكم في تمكين المسافة البادئة ("الإخراج الجميل"). الافتراضي هو 0
(معطل):
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
مكالمات UltraJSON في الثانية مقارنة بموزعي JSON المشهورين الآخرين مع زيادة الأداء المحددة أسفل كل منها.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP الخميس 20 أبريل 13:19:31 التوقيت العالمي المنسق 2023
ujson | com.orjson | com.simplejson | json | |
---|---|---|---|---|
صفيف يحتوي على 256 زوجًا | ||||
ترميز | 18,282 | 79,569 | 5,681 | 5,935 |
فك التشفير | 28,765 | 93,283 | 13,844 | 13,367 |
مصفوفة تحتوي على 256 سلسلة UTF-8 | ||||
ترميز | 3,457 | 26,437 | 3,630 | 3,653 |
فك التشفير | 3,576 | 4,236 | 522 | 1,978 |
مصفوفة تحتوي على 256 سلسلة | ||||
ترميز | 44,769 | 125,920 | 21,401 | 23,565 |
فك التشفير | 28,518 | 75,043 | 41,496 | 42,221 |
كائن معقد متوسط | ||||
ترميز | 11,672 | 47,659 | 3,913 | 5,729 |
فك التشفير | 12,522 | 23,599 | 8,007 | 9,720 |
صفيف يحتوي على 256 قيمة حقيقية | ||||
ترميز | 110,444 | 425,919 | 81,428 | 84,347 |
فك التشفير | 203,430 | 318,193 | 146,867 | 156,249 |
مصفوفة تحتوي على 256 زوجًا من dict{string, int}. | ||||
ترميز | 14,170 | 72,514 | 3,050 | 7,079 |
فك التشفير | 19,116 | 27,542 | 9,374 | 13,713 |
إملاء باستخدام 256 مصفوفة مع 256 زوجًا من dict{string, int}. | ||||
ترميز | 55 | 282 | 11 | 26 |
فك التشفير | 48 | 53 | 27 | 34 |
إملاء باستخدام 256 مصفوفة مع 256 زوجًا من dict{string, int}، وإخراج المفاتيح المصنفة | ||||
ترميز | 42 | 8 | 27 | |
كائن معقد | ||||
ترميز | 462 | 397 | 444 | |
فك التشفير | 480 | 618 | 177 | 310 |
المقاييس المذكورة أعلاه موجودة في المكالمة/الثانية، والأكبر هو الأفضل.
بالنسبة لأولئك ذوي الاحتياجات الخاصة، مثل حزم توزيع Linux، يتم توفير العديد من خيارات البناء في شكل متغيرات البيئة.
بشكل افتراضي، يتم تجريد رموز تصحيح الأخطاء من أنظمة التشغيل Linux. يؤدي تعيين متغير البيئة هذا بقيمة 1
أو True
إلى تعطيل هذا السلوك.
عادةً ما يتم استخدام متغيري البيئة هذين معًا، مثل:
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
يجب على المستخدمين الذين يخططون للارتباط بمكتبة مشتركة خارجية أن يكونوا على دراية بمتطلبات توافق ABI التي يقدمها هذا عند ترقية مكتبات النظام أو نسخ العجلات المترجمة إلى أجهزة أخرى.
دليل واحد أو أكثر، محدد بواسطة os.pathsep
(مثل متغير بيئة PATH
)، للبحث فيه عن ملفات رأس double-conversion
؛ الافتراضي هو استخدام النسخة المجمعة.
إشارات المترجم اللازمة لربط مكتبة double-conversion
؛ الافتراضي هو استخدام النسخة المجمعة.