跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

Working with JSON Data: json_encode and json_decode

บทความนี้อธิบายการทำงานกับข้อมูล JSON ใน PHP โดยใช้ฟังก์ชัน `json_encode()` สำหรับแปลงข้อมูล PHP array หรือ object เป็น JSON string และ `json_decode()` สำหรับแป...

Working with JSON Data: json_encode and json_decode

ในโลกของการพัฒนาเว็บแอปพลิเคชัน การแลกเปลี่ยนข้อมูลระหว่าง client (เช่น browser) และ server เป็นสิ่งจำเป็นอย่างยิ่ง รูปแบบข้อมูลที่ได้รับความนิยมและใช้งานกันอย่างแพร่หลายคือ JSON (JavaScript Object Notation) ซึ่งเป็นรูปแบบข้อมูลที่มีโครงสร้างที่อ่านง่าย ทั้งสำหรับมนุษย์และเครื่องจักร บทความนี้จะพาคุณไปรู้จักกับการทำงานกับข้อมูล JSON ใน PHP โดยใช้ฟังก์ชัน json_encode() และ json_decode()

JSON คืออะไร?

JSON เป็นรูปแบบข้อมูลที่มีโครงสร้างคล้ายกับ object ใน JavaScript ประกอบไปด้วยคู่ของ key-value โดยที่ key เป็น string และ value สามารถเป็นได้ทั้ง string, number, boolean, null, array หรือ object อื่นๆ (nested object) ตัวอย่าง JSON:

{
  "name": "John Doe",
  "age": 30,
  "city": "New York",
  "skills": ["PHP", "JavaScript", "SQL"]
}

การ Encode PHP Array เป็น JSON String ด้วย json_encode()

ฟังก์ชัน json_encode() ใน PHP ใช้สำหรับแปลง PHP array หรือ object ให้เป็น JSON string ซึ่งเป็นรูปแบบข้อมูลที่สามารถส่งไปยัง client หรือบันทึกลงในไฟล์ได้

รูปแบบการใช้งาน:

string json_encode(mixed $value, int $options = 0, int $depth = 512): string|false
  • $value: ข้อมูลที่ต้องการ encode (array หรือ object)
  • $options: (Optional) Bitmask ของ JSON encode options (เช่น JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE)
  • $depth: (Optional) Maximum nesting depth. ต้องมากกว่า 0

ตัวอย่าง:

<code class="language-php">
<?php
$data = [
    "name" => "Jane Smith",
    "age" => 25,
    "city" => "London",
    "skills" => ["PHP", "HTML", "CSS"]
];

$json_string = json_encode($data);

echo $json_string; // Output: {"name":"Jane Smith","age":25,"city":"London","skills":["PHP","HTML","CSS"]}

// เพิ่ม option JSON_PRETTY_PRINT เพื่อให้อ่านง่ายขึ้น
$pretty_json_string = json_encode($data, JSON_PRETTY_PRINT);

echo "<br><pre>" . $pretty_json_string . "
"; /* Output: { "name": "Jane Smith", "age": 25, "city": "London", "skills": [ "PHP", "HTML", "CSS" ] } */ // เพิ่ม option JSON_UNESCAPED_UNICODE สำหรับภาษาไทย $thai_data = ["name" => "สมชาย", "age" => 30]; $thai_json = json_encode($thai_data, JSON_UNESCAPED_UNICODE); echo "
" . $thai_json; // Output: {"name":"สมชาย","age":30} ?>

เหตุผลเชิงออกแบบและแนวปฏิบัติที่ดี:

  • การเลือก Options ที่เหมาะสม: พิจารณา options ของ json_encode() อย่างรอบคอบ เช่น JSON_PRETTY_PRINT สำหรับการ debug หรือ JSON_UNESCAPED_UNICODE สำหรับภาษาที่มีอักขระพิเศษ
  • การจัดการ Error: json_encode() อาจ return false หากเกิด error ในการ encode ควรตรวจสอบค่าที่ return และจัดการ error ให้เหมาะสม
  • ความลึกของ Nesting: กำหนด depth หาก array มี nesting ที่ลึกมากเกินไป เพื่อป้องกันปัญหา performance

การ Decode JSON String เป็น PHP Array ด้วย json_decode()

ฟังก์ชัน json_decode() ใน PHP ใช้สำหรับแปลง JSON string กลับเป็น PHP array หรือ object ซึ่งช่วยให้เราสามารถนำข้อมูลจาก JSON มาใช้งานใน PHP ได้

รูปแบบการใช้งาน:

mixed json_decode(string $json, bool $associative = false, int $depth = 512, int $options = 0): mixed|null
  • $json: JSON string ที่ต้องการ decode
  • $associative: (Optional) หากเป็น true จะ return เป็น associative array หากเป็น false (ค่า default) จะ return เป็น object
  • $depth: (Optional) Maximum nesting depth. ต้องมากกว่า 0
  • $options: (Optional) Bitmask ของ JSON decode options (เช่น JSON_BIGINT_AS_STRING)

ตัวอย่าง:

<?php
$json_string = '{"name":"Jane Smith","age":25,"city":"London","skills":["PHP","HTML","CSS"]}';

// Decode เป็น associative array
$data_array = json_decode($json_string, true);

echo $data_array["name"]; // Output: Jane Smith
echo "<br>";

// Decode เป็น object
$data_object = json_decode($json_string);

echo $data_object->name; // Output: Jane Smith
echo "<br>";

// การวนลูปผ่าน skills ใน associative array
echo "Skills: ";
foreach ($data_array["skills"] as $skill) {
    echo $skill . ", ";
}
echo "<br>";

// การวนลูปผ่าน skills ใน object
echo "Skills: ";
foreach ($data_object->skills as $skill) {
    echo $skill . ", ";
}
echo "<br>";

//จัดการ error กรณี JSON ไม่ถูกต้อง
$invalid_json = '{"name":"Jane Smith",age:25}'; //age ไม่มี quote
$data = json_decode($invalid_json, true);

if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
    echo "Error decoding JSON: " . json_last_error_msg();
}

?>

เหตุผลเชิงออกแบบและแนวปฏิบัติที่ดี:

  • การเลือก Associative Array หรือ Object: เลือกรูปแบบที่เหมาะสมกับการใช้งาน หากต้องการเข้าถึงข้อมูลด้วย index ที่เป็น string ให้ใช้ associative array หากต้องการเข้าถึงข้อมูลด้วย object properties ให้ใช้ object
  • การจัดการ Error: json_decode() อาจ return null หาก JSON string ไม่ถูกต้อง ควรตรวจสอบค่าที่ return และใช้ json_last_error() และ json_last_error_msg() เพื่อตรวจสอบ error
  • การจัดการ Data Types: ระวังเรื่อง data types โดยเฉพาะตัวเลขขนาดใหญ่ หากต้องการให้ตัวเลขขนาดใหญ่ถูก decode เป็น string ให้ใช้ option JSON_BIGINT_AS_STRING

การใช้งาน JSON กับ API

JSON เป็นรูปแบบข้อมูลที่นิยมใช้ในการสร้าง API (Application Programming Interface) เนื่องจากมีความยืดหยุ่นและง่ายต่อการ parse ทั้งในฝั่ง client และ server ตัวอย่างการใช้งาน JSON กับ API:

ฝั่ง Server (PHP):

<?php
// กำหนด header เป็น JSON
header('Content-Type: application/json');

$data = [
    "id" => 123,
    "product_name" => "Awesome Product",
    "price" => 99.99
];

// Encode ข้อมูลเป็น JSON
$json_response = json_encode($data);

// ส่ง JSON response กลับไปยัง client
echo $json_response;
?>

ฝั่ง Client (JavaScript):

fetch('/api/product')
  .then(response => response.json())
  .then(data => {
    console.log(data.product_name); // Output: Awesome Product
  })
  .catch(error => {
    console.error('Error:', error);
  });

Trade-offs และแนวปฏิบัติที่ดี:

  • Content-Type Header: กำหนด Content-Type header เป็น application/json เพื่อบอก client ว่า response เป็น JSON
  • Error Handling: จัดการ error ที่อาจเกิดขึ้นในการสร้าง JSON response และส่ง error message กลับไปยัง client ในรูปแบบ JSON
  • API Documentation: สร้าง documentation ที่ชัดเจนเกี่ยวกับรูปแบบ JSON ที่ API return เพื่อให้ client สามารถใช้งาน API ได้อย่างถูกต้อง

การทำงานกับ JSON เป็นทักษะที่สำคัญในการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ การเข้าใจวิธีการ encode และ decode ข้อมูล JSON ใน PHP จะช่วยให้คุณสามารถสร้าง API ที่มีประสิทธิภาพและแลกเปลี่ยนข้อมูลกับ client ได้อย่างราบรื่น ในบทความถัดไป เราจะเรียนรู้เกี่ยวกับการสร้าง API endpoint อย่างง่ายด้วย PHP

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务