ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

JSON ใน PHP: การ Encode และ Decode

บทความนี้อธิบายถึงการใช้งาน JSON ใน PHP โดยครอบคลุมตั้งแต่พื้นฐานของ JSON, การแปลงข้อมูล PHP เป็น JSON String ด้วย `json_encode()` พร้อมตัวเลือกต่างๆ, การแปลง J...

JSON ใน PHP: การ Encode และ Decode

ในโลกของการพัฒนาเว็บแอปพลิเคชัน การแลกเปลี่ยนข้อมูลระหว่างส่วนต่างๆ ของระบบเป็นสิ่งสำคัญอย่างยิ่ง และรูปแบบข้อมูลที่ได้รับความนิยมอย่างแพร่หลายคือ JSON (JavaScript Object Notation) เนื่องจากมีโครงสร้างที่อ่านง่าย, น้ำหนักเบา, และสามารถใช้งานได้กับหลายภาษาโปรแกรมมิ่ง ในบทนี้ เราจะมาเรียนรู้วิธีการทำงานกับ JSON ใน PHP ตั้งแต่การแปลงข้อมูล PHP เป็น JSON (encode) และการแปลง JSON กลับเป็นข้อมูล PHP (decode) พร้อมทั้งเรียนรู้วิธีการจัดการข้อผิดพลาดที่อาจเกิดขึ้น

JSON คืออะไร?

JSON เป็นรูปแบบข้อมูลที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่าง Server และ Client หรือระหว่าง Application ต่างๆ มีโครงสร้างที่ประกอบด้วย Key-Value pairs (คล้ายกับ Associative Array ใน PHP) และสามารถเก็บข้อมูลได้หลายประเภท เช่น String, Number, Boolean, Array, และ Object

การแปลงข้อมูล PHP เป็น JSON ด้วย json_encode()

ฟังก์ชัน json_encode() ใช้สำหรับแปลงข้อมูล PHP ให้เป็น JSON String รูปแบบการใช้งานพื้นฐานคือ:

<?php

$data = [
  'name' => 'John Doe',
  'age' => 30,
  'city' => 'New York'
];

$json = json_encode($data);

echo $json; // Output: {"name":"John Doe","age":30,"city":"New York"}

?>

จากตัวอย่าง เราได้สร้าง Array ใน PHP ที่เก็บข้อมูลเกี่ยวกับบุคคลหนึ่ง จากนั้นใช้ json_encode() เพื่อแปลง Array นี้เป็น JSON String แล้วแสดงผลลัพธ์ออกมา

ตัวเลือก (Options) ใน json_encode()

json_encode() มีตัวเลือก (Options) ที่สามารถใช้เพื่อปรับแต่งรูปแบบของ JSON ที่ได้ ตัวอย่างเช่น:

  • JSON_PRETTY_PRINT: ทำให้ JSON String มีรูปแบบที่อ่านง่าย โดยมีการจัดเรียงและเยื้อง (indentation)
  • JSON_UNESCAPED_UNICODE: ป้องกันการ Escape ตัวอักษร Unicode (เช่น ภาษาไทย)
  • JSON_UNESCAPED_SLASHES: ป้องกันการ Escape เครื่องหมาย Slash (/)

ตัวอย่างการใช้งาน Options:

<?php

$data = [
  'name' => 'สมชาย ใจดี',
  'url' => 'https://www.example.com'
];

$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

echo "<pre>"; // ใช้ <pre> เพื่อแสดงผลลัพธ์ที่มีการจัดรูปแบบ
echo $json;
echo "</pre>";

/*
Output:
{
    "name": "สมชาย ใจดี",
    "url": "https://www.example.com"
}
*/

?>

จากตัวอย่าง เราได้ใช้ Options หลายตัวพร้อมกัน โดยใช้เครื่องหมาย | (Bitwise OR) เพื่อรวม Options เข้าด้วยกัน

การแปลง JSON เป็นข้อมูล PHP ด้วย json_decode()

ฟังก์ชัน json_decode() ใช้สำหรับแปลง JSON String กลับเป็นข้อมูล PHP (โดยปกติจะเป็น Object หรือ Associative Array) รูปแบบการใช้งานพื้นฐานคือ:

<?php

$json = '{"name":"John Doe","age":30,"city":"New York"}';

$data = json_decode($json); // แปลงเป็น Object

echo $data->name; // Output: John Doe
echo "<br>";
echo $data->age;  // Output: 30

$dataArray = json_decode($json, true); // แปลงเป็น Associative Array

echo "<br>";
echo $dataArray['name']; // Output: John Doe
echo "<br>";
echo $dataArray['city']; // Output: New York

?>

จากตัวอย่าง เราได้สร้าง JSON String แล้วใช้ json_decode() เพื่อแปลง JSON String นี้เป็น Object และ Associative Array โดยถ้าเราไม่ระบุ Parameter ที่สอง (true) json_decode() จะคืนค่าเป็น Object แต่ถ้าเราใส่ true จะคืนค่าเป็น Associative Array

Handling JSON Errors

เมื่อทำงานกับ JSON อาจเกิดข้อผิดพลาดได้ เช่น JSON String ที่ไม่ถูกต้อง หรือการ Encode/Decode ข้อมูลที่ไม่สามารถทำได้ PHP มีฟังก์ชัน json_last_error() และ json_last_error_msg() ที่สามารถใช้เพื่อตรวจสอบและแสดงข้อผิดพลาดล่าสุดที่เกิดขึ้นกับการทำงานกับ JSON

<?php

$invalidJson = '{ "name": "John Doe", "age": 30, }'; // JSON ไม่ถูกต้อง (มี comma เกินมา)

$data = json_decode($invalidJson);

if (json_last_error() !== JSON_ERROR_NONE) {
  echo "JSON Error: " . json_last_error_msg();
}

/*
Output:
JSON Error: Syntax error
*/

?>

จากตัวอย่าง เราได้สร้าง JSON String ที่ไม่ถูกต้อง (มี comma เกินมา) เมื่อเราพยายาม Decode JSON String นี้ จะเกิดข้อผิดพลาด และเราสามารถตรวจสอบข้อผิดพลาดได้ด้วย json_last_error() และแสดงข้อความผิดพลาดด้วย json_last_error_msg()

กรณีใช้งานจริง: การรับส่งข้อมูล API

หนึ่งในกรณีใช้งานที่พบบ่อยที่สุดของ JSON คือการรับส่งข้อมูลระหว่าง Client และ Server ใน API (Application Programming Interface) ตัวอย่างเช่น:

<?php

// Server-side (API Endpoint)
header('Content-Type: application/json'); // กำหนด Content Type เป็น JSON

$data = [
  'status' => 'success',
  'message' => 'Data retrieved successfully',
  'data' => [
    'id' => 123,
    'title' => 'Product A',
    'price' => 99.99
  ]
];

echo json_encode($data);

// Client-side (Receiving the data)
$json = file_get_contents('https://your-api-endpoint.com/products/123'); // ดึงข้อมูลจาก API Endpoint

$data = json_decode($json, true);

if ($data['status'] === 'success') {
  echo "Product Title: " . $data['data']['title']; // Output: Product Title: Product A
} else {
  echo "Error: " . $data['message'];
}

?>

จากตัวอย่าง ฝั่ง Server จะสร้าง Array ที่มีข้อมูลเกี่ยวกับ Product แล้วแปลงเป็น JSON String และส่งกลับไปยัง Client ฝั่ง Client จะดึงข้อมูลจาก API Endpoint แล้วแปลง JSON String กลับเป็น Array และแสดงผลลัพธ์

ข้อผิดพลาดที่พบบ่อยและการแก้ไข

  • Character Encoding: ตรวจสอบให้แน่ใจว่า Character Encoding ของไฟล์ PHP และฐานข้อมูล (ถ้ามี) เป็น UTF-8 เพื่อป้องกันปัญหาเกี่ยวกับการแสดงผลภาษาไทยหรือภาษาอื่นๆ
  • Invalid JSON: ใช้ JSON Validator (เช่น JSONLint) เพื่อตรวจสอบว่า JSON String ถูกต้องหรือไม่
  • Data Types: ระวังเรื่อง Data Types เมื่อ Encode/Decode JSON เนื่องจากบาง Data Types ใน PHP อาจถูกแปลงเป็น Data Types อื่นใน JSON (เช่น Integer อาจถูกแปลงเป็น String)
  • Maximum Execution Time: หากข้อมูลมีขนาดใหญ่มาก การ Encode/Decode อาจใช้เวลานานเกินไป ทำให้เกิด Error "Maximum Execution Time Exceeded" ในกรณีนี้ คุณอาจต้องเพิ่ม max_execution_time ใน php.ini หรือใช้ Streaming API (ถ้ามี)

สรุป

JSON เป็นรูปแบบข้อมูลที่สำคัญในการพัฒนาเว็บแอปพลิเคชัน การเรียนรู้วิธีการ Encode และ Decode JSON ใน PHP จะช่วยให้คุณสามารถแลกเปลี่ยนข้อมูลกับ Server, Client, และ Application อื่นๆ ได้อย่างมีประสิทธิภาพ อย่าลืมตรวจสอบข้อผิดพลาดที่อาจเกิดขึ้นและแก้ไขให้ถูกต้อง เพื่อให้การทำงานกับ JSON เป็นไปอย่างราบรื่น ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับการใช้ Curl ใน PHP เพื่อดึงข้อมูลจากภายนอก

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์