UltraJSON เป็นตัวเข้ารหัสและตัวถอดรหัส JSON ที่รวดเร็วเป็นพิเศษซึ่งเขียนด้วยภาษา C บริสุทธิ์พร้อมการเชื่อมโยงสำหรับ Python 3.9+
ติดตั้งด้วย pip:
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 และ Escape อักขระที่ขยายทั้งหมดที่สูงกว่า 127 ค่าเริ่มต้นคือ True
หากรูปแบบสิ้นสุดของคุณรองรับ UTF-8 ขอแนะนำให้ตั้งค่าตัวเลือกนี้เป็นเท็จเพื่อประหยัดพื้นที่:
>>> 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"'
ควบคุมว่าจะเปิดใช้งานการเยื้อง ("pretty output") หรือไม่ ค่าเริ่มต้นคือ 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 UTC 2023
อูจสัน | ออร์จสัน | ซิมเพิลเจสัน | json.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 |
Dict ที่มี 256 อาร์เรย์ที่มี 256 คู่ dict{string, int} | ||||
เข้ารหัส | 55 | 282 | 11 | 26 |
ถอดรหัส | 48 | 53 | 27 | 34 |
Dict ที่มี 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
ค่าเริ่มต้นคือการใช้สำเนาที่รวมกลุ่ม