ข้ามไปยังเนื้อหาหลัก

แปลง PHP Serialize ↔ JSON

อ่านค่า serialize() ที่เก็บในฐานข้อมูลให้เป็น JSON ที่คนอ่านรู้เรื่อง

ผลลัพธ์ JSON
ผลลัพธ์จะแสดงที่นี่

รูปแบบ serialize() นับความยาวข้อความเป็นไบต์ ไม่ใช่จำนวนตัวอักษร ข้อความไทยหนึ่งตัวใช้ 3 ไบต์ เครื่องมือนี้จึงอ่านและเขียนตามไบต์อย่างถูกต้อง ต่างจากตัวแปลงที่นับตัวอักษรแล้วทำให้ข้อมูลเพี้ยน

แปลงในเบราว์เซอร์ของคุณทั้งหมด ข้อมูลไม่ถูกส่งขึ้นเซิร์ฟเวอร์

เกี่ยวกับเครื่องมือนี้

เครื่องมือ แปลง PHP Serialize ↔ JSON อ่านค่าที่ฟังก์ชัน serialize() ของ PHP สร้างขึ้น แล้วแสดงเป็น JSON ที่คนอ่านเข้าใจได้ และแปลงกลับได้ด้วย

สถานการณ์ที่คนเจอบ่อยที่สุดคือเปิดฐานข้อมูลแล้วพบคอลัมน์หน้าตาแบบ a:3:{s:4:"name";...} — ตาราง options ของ WordPress เต็มไปด้วยค่าแบบนี้ เช่นเดียวกับระบบ CMS เก่า ๆ ที่เขียนด้วย PHP ปกติต้องเปิด PHP ขึ้นมารันถึงจะอ่านออก ซึ่งเป็นเหตุผลที่เครื่องมือบนเบราว์เซอร์มีประโยชน์

จุดสำคัญที่สุดที่ทำให้เครื่องมือนี้ต่างจากตัวแปลงทั่วไปคือ การนับความยาวเป็นไบต์ รูปแบบ serialize() ระบุความยาวข้อความไว้ล่วงหน้า และนับเป็นไบต์เสมอ คำว่า "สวัสดี" มี 6 ตัวอักษรแต่กินพื้นที่ 18 ไบต์ ตัวแปลงที่ตัดข้อความตามจำนวนตัวอักษรจะได้ข้อความผิด แล้วทุกฟิลด์ที่ตามมาก็เลื่อนผิดตำแหน่งไปหมด ซึ่งกับข้อมูลภาษาไทยแปลว่าพังแทบทุกกรณี

ระบบยังรักษาความหมายของโครงสร้างไว้ด้วย — array ที่คีย์ไม่ได้เรียง 0, 1, 2 พอดีจะกลายเป็น object ไม่ใช่รายการ เพราะการยุบเป็นรายการจะทำให้คีย์หายไป

วิธีใช้งาน

  1. 1เลือกทิศทาง: serialize() → JSON หรือ JSON → serialize()
  2. 2วางค่าที่คัดลอกมาจากฐานข้อมูลลงในช่อง
  3. 3ผลลัพธ์จะแปลงให้ทันที ถ้ารูปแบบผิดจะบอกตำแหน่งที่มีปัญหา
  4. 4กดสลับเพื่อส่งผลลัพธ์กลับไปเป็นข้อมูลเข้าและแปลงกลับได้ทันที

คำถามที่พบบ่อย

ค่าแบบ a:2:{...} นี้คืออะไร
เป็นผลลัพธ์จากฟังก์ชัน serialize() ของ PHP ซึ่งแปลง array หรือ object ให้เป็นข้อความเพื่อเก็บลงฐานข้อมูล พบบ่อยมากในตาราง options ของ WordPress และในระบบเก่าที่เขียนด้วย PHP
ทำไมข้อความไทยถึงเพี้ยนเวลาใช้เครื่องมืออื่น
เพราะรูปแบบนี้ระบุความยาวข้อความเป็นไบต์ ไม่ใช่จำนวนตัวอักษร คำว่า สวัสดี มี 6 ตัวอักษรแต่ 18 ไบต์ เครื่องมือที่นับตัวอักษรจะตัดข้อความผิดตำแหน่ง แล้วทำให้ทุกฟิลด์ที่ตามมาเพี้ยนตามไปด้วย
รองรับ object ของ PHP ไหม
รองรับ ค่าแบบ O:4:"User":... จะถูกแปลงเป็น object ธรรมดาโดยเก็บชื่อคลาสไว้ในฟิลด์ __class เพราะ JSON ไม่มีแนวคิดเรื่องคลาส
ทำไมบาง array กลายเป็น object แทนที่จะเป็นรายการ
เพราะ array ของ PHP เป็นแผนที่แบบมีลำดับ ถ้าคีย์ไม่ใช่ 0, 1, 2 เรียงกันพอดี การแปลงเป็นรายการของ JSON จะทำให้คีย์หายไป ระบบจึงเก็บเป็น object แทนเพื่อไม่ให้ข้อมูลสูญ
ปลอดภัยไหมถ้าวางข้อมูลจริงจากฐานข้อมูล
ปลอดภัย การแปลงทั้งหมดทำในเบราว์เซอร์ของคุณ ไม่มีการส่งข้อมูลออกไปที่ใด

เครื่องมือที่เกี่ยวข้อง

แปลง PHP Array เป็น JSON

เปลี่ยน array ของ PHP เป็น JSON ใช้งานต่อได้ทันที

จัดรูปแบบ JSON (JSON Formatter)

จัดรูปแบบ ตรวจสอบ และย่อ JSON สำหรับนักพัฒนา

แปลง JSON ↔ YAML

สลับไปมาระหว่าง JSON กับ YAML ในคลิกเดียว

เข้ารหัส / ถอดรหัส Base64

เข้ารหัส/ถอดรหัส Base64 รองรับภาษาไทย