การบีบอัด JSON คืออะไร?
JSON (JavaScript Object Notation) คือรูปแบบการแลกเปลี่ยนข้อมูลแบบข้อความที่มีน้ำหนักเบา กำหนดโดย RFC 8259 และ ECMA-404 การบีบอัดจะลบช่องว่าง แท็บ และบรรทัดใหม่ทุกตัวที่อยู่นอกสตริงลิเทอรัล — ค่าต่าง ๆ จะถูกรักษาไว้ไบต์ต่อไบต์ มีเพียงช่องว่างเชิงรูปลักษณ์เท่านั้นที่ถูกลบออก ผลลัพธ์จะแยกวิเคราะห์ได้เป็นค่าเดียวกับอินพุตทุกประการ
การบีบอัด JSON ทำงานอย่างไร?
ข้อมูลของคุณถูกประมวลผลทั้งหมดในเบราว์เซอร์โดยใช้ฟังก์ชันในตัว JSON.parse และ JSON.stringify ขั้นตอนหลักคือ:
- อินพุตของคุณถูกอ่านจาก textarea ตามตัวอักษร — ทุกไบต์ที่คุณวางจะอยู่ในหน่วยความจำในเครื่อง
- เบราว์เซอร์แยกวิเคราะห์ด้วย
JSON.parseหากอินพุตไม่ใช่ JSON ที่ถูกต้อง ตัวแยกวิเคราะห์จะโยนSyntaxErrorที่ถูกจับและแสดงตามต้นฉบับ — ข้อความของคุณไม่เคยออกจากหน้าเว็บ - เมื่อการแยกวิเคราะห์สำเร็จ ค่าที่แยกวิเคราะห์แล้วจะถูกปล่อยใหม่ด้วย
JSON.stringify(value)— โดยไม่มีอาร์กิวเมนต์การเยื้อง — ให้ผลเป็นรูปแบบที่ถูกต้องที่สั้นที่สุดของค่าเดียวกัน - ความยาวไบต์ของข้อความต้นฉบับและข้อความที่บีบอัดแล้วคำนวณด้วย
new TextEncoder().encode(...).byteLength— จำนวนไบต์ UTF-8 เดียวกับที่เซิร์ฟเวอร์ HTTP จะเห็นบนสาย - ผลลัพธ์ถูกเขียนลงใน textarea แบบอ่านอย่างเดียว แถบเมตริกรายงานส่วนต่างไบต์พร้อมเปอร์เซ็นต์ที่ประหยัด และปุ่มดาวน์โหลดบรรจุผลลัพธ์เป็นไฟล์
.min.jsonที่คุณสามารถนำไปใช้ได้
ทำไมจึงบีบอัด JSON ด้วยเครื่องมือนี้?
- ความเป็นส่วนตัว: ทุกครั้งที่แยกวิเคราะห์ บีบอัด และวัดเกิดขึ้นในเบราว์เซอร์ของคุณ JSON ไม่เคยถึงเซิร์ฟเวอร์ของเรา — ไม่อัปโหลด ไม่เก็บ telemetry ไม่ต้องมีบัญชี
- ตัวเลขไบต์จริง: ขนาดเดิม ขนาดที่บีบอัดและค่าที่ประหยัดคำนวณด้วย TextEncoder เพื่อให้คุณเห็นส่วนต่างไบต์ UTF-8 จริงที่ CDN หรือ API gateway จะเรียกเก็บ
- ไม่สูญเสียข้อมูล: การบีบอัดเป็นเชิงรูปลักษณ์ล้วน ๆ — ทุกค่าจะแยกวิเคราะห์เป็นต้นไม้ JSON เดียวกัน จึงปลอดภัยสำหรับ payload โปรดักชัน ไฟล์ manifest และ fixture ฝังตัว
- รวดเร็ว:
JSON.parse+JSON.stringifyดั้งเดิมจัดการ payload ขนาดคลิปบอร์ดได้ทันที โดยไม่ต้องโหลดไลบรารีภายนอก
การใช้งานทั่วไปของการบีบอัด JSON มีอะไรบ้าง?
การลบช่องว่างที่ไม่สำคัญออกจาก JSON ปรากฏในงานพัฒนาเว็บ วิศวกรรมข้อมูล และระบบฝังตัว:
- ลด payload ของ API: ย่อเนื้อหา request และ response ก่อนผ่าน API gateway ที่คิดเงิน ลิงก์ egress ที่เสียค่าใช้จ่าย หรือลิงก์ดาวเทียม
- ฝังใน HTML: ใส่ JSON blob ในแอตทริบิวต์
data-*หรือแท็ก<script type="application/json">โดยไม่มีช่องว่าง pretty-printer หลุดเข้าหน้าที่แสดงผล - localStorage ที่เล็กลง: ลดการใช้โควต้า localStorage / IndexedDB ด้วยการเขียน JSON ที่บีบอัดแทน JSON ที่จัดรูปแบบสวย ๆ ซึ่งมีค่าเป็นพิเศษบนเบราว์เซอร์มือถือที่มีข้อจำกัดการเก็บข้อมูลต่อ origin
ตัวอย่างการบีบอัด JSON มีลักษณะอย่างไร?
การวางไฟล์ตั้งค่าขนาด 1.2 KB แบบจัดรูปแบบสวย (ประมาณ 1,225 ไบต์ด้วยการเยื้อง 2 ช่องว่าง) แล้วกด บีบอัด มักจะย่อมันลงเหลือต่ำกว่า 0.4 KB — ประหยัดได้ 66% — โดยทุกคีย์และค่ายังคงอยู่ครบถ้วน ไฟล์ output.min.json ที่ดาวน์โหลดได้เหมือนไบต์ต่อไบต์กับสิ่งที่เซิร์ฟเวอร์ HTTP จะส่งออกด้วย Content-Type: application/json และไม่มี middleware จัดรูปแบบใด ๆ
เครื่องมือนี้ทำงานในเบราว์เซอร์ของฉันหรือไม่?
ใช่ ขั้นตอนการบีบอัดเป็น JSON.parse + JSON.stringify ล้วน ๆ ที่ทำงานในแท็บเบราว์เซอร์ ไม่มีอะไรถูกอัปโหลด ไม่มี service worker ทำหน้าที่พร็อกซีอินพุตของคุณ และหน้าเว็บไม่ส่งคำขอเครือข่ายสำหรับขั้นตอนการบีบอัดเลย ลำเลียงออกเพียงอย่างเดียวคือทรัพยากรการโหลดหน้ามาตรฐาน (CSS, ฟอนต์, analytics) — JSON ของคุณไม่เคยถึง Ultim8Soft
ทำไมต้องบีบอัด JSON?
JSON ที่บีบอัดแล้วแยกวิเคราะห์เป็นค่าเดียวกับต้นฉบับที่จัดรูปแบบสวย ๆ แต่เล็กกว่าทั้งบนสายและในที่เก็บข้อมูล payload ที่เล็กลงหมายถึงบิล CDN egress ต่ำลง ดาวน์โหลดบนมือถือเร็วขึ้น แรงกดดันหน่วยความจำใน service worker น้อยลง และพอดีกว่ากับซองขนาดคงที่อย่าง JWT payload, HTML data-* attribute ฝังตัว และโควต้า localStorage สำหรับ API ปริมาณสูง การประหยัดไบต์ทบต้น — การลด 30% ที่ endpoint 1 GB/วัน ประหยัดประมาณ 9 GB ต่อเดือน
การบีบอัดทำให้ข้อมูลสูญหายหรือไม่?
ไม่ การบีบอัด JSON ลบเฉพาะช่องว่างที่อยู่ นอก สตริงลิเทอรัล — ช่องว่าง แท็บ และบรรทัดใหม่ที่สเปกได้จัดประเภทไว้แล้วว่าไม่มีนัยสำคัญ ทุกคีย์ ค่า ตัวเลข ลำดับ escape และอักขระสตริงยังถูกเก็บไว้ไบต์ต่อไบต์ ผลลัพธ์จะแยกวิเคราะห์เป็นค่าที่ deepEqual กับอินพุต มีเพียงการเยื้องเชิงรูปลักษณ์เท่านั้นที่หายไป
ตัวจัดรูปแบบกับตัวบีบอัดต่างกันอย่างไร?
เครื่องมือคู่หู JSON Formatter ไปในทิศทางตรงกันข้าม: ขยายช่องว่างเพื่อให้มนุษย์อ่านโครงสร้างซ้อนกันได้ ส่วน ตัวบีบอัด ลบช่องว่างนั้นออกอีกครั้งเพื่อการส่งและจัดเก็บ ทั้งสองเครื่องมือเป็นกลับด้านกัน — ส่งเอกสาร JSON ผ่าน Formatter → Minifier จะได้ไบต์สตริงเดียวกับที่คุณเริ่มต้นป้อนใน minifier เพราะทั้งคู่ทำงานบนค่าที่แยกวิเคราะห์แล้ว ไม่ใช่บนรูปแบบเชิงสายตา
ตัวบีบอัด JSON นี้ใช้ parser ตัวเดียวกับที่ runtime Node.js, Deno หรือเบราว์เซอร์ของคุณใช้ และให้ผลลัพธ์ที่เหมือนไบต์ต่อไบต์กับสิ่งที่เซิร์ฟเวอร์ HTTP เรียบ ๆ จะส่งออก วาง JSON ใด ๆ ด้านบน คัดลอกผลลัพธ์ หรือดาวน์โหลดเป็น .min.json