การสร้าง JSON String ใน PHP
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับ JSON ว่ามันคืออะไร มีโครงสร้างอย่างไร และทำไมถึงมีความสำคัญในการพัฒนา API และ Web Services ในบทนี้ เราจะมาเจาะลึกวิธีการสร้าง JSON string จากข้อมูลใน PHP เพื่อให้เราสามารถส่งข้อมูลในรูปแบบ JSON กลับไปยัง Client ได้
การใช้ฟังก์ชัน json_encode()
PHP มีฟังก์ชันที่ชื่อว่า json_encode() ซึ่งทำหน้าที่แปลงข้อมูล PHP (เช่น array, object) ให้เป็น JSON string ได้อย่างง่ายดาย ฟังก์ชันนี้เป็นหัวใจสำคัญในการสร้าง JSON response ใน API ของเรา
รูปแบบการใช้งานพื้นฐานของ json_encode() คือ:
string json_encode ( mixed $value , int $options = 0 , int $depth = 512 )
$value: ข้อมูล PHP ที่ต้องการแปลงเป็น JSON$options: (Optional) ตัวเลือกเพิ่มเติมในการแปลง JSON$depth: (Optional) กำหนดความลึกสูงสุดของการเข้ารหัส (default: 512)
ลองดูตัวอย่างการใช้งานง่ายๆ:
<?php
$data = array(
'name' => 'John Doe',
'age' => 30,
'city' => 'New York'
);
$json_string = json_encode($data);
echo $json_string; // Output: {"name":"John Doe","age":30,"city":"New York"}
?>
ในตัวอย่างนี้ เราสร้าง array ที่ชื่อ $data ซึ่งมีข้อมูลชื่อ, อายุ, และเมือง จากนั้นเราใช้ json_encode() เพื่อแปลง array นี้ให้เป็น JSON string และแสดงผลลัพธ์ออกมา
การกำหนด Options ให้กับ json_encode()
ฟังก์ชัน json_encode() มี options หลายอย่างที่เราสามารถใช้เพื่อปรับแต่งการแปลง JSON ให้เหมาะสมกับความต้องการของเรา ตัวอย่าง options ที่พบบ่อย:
JSON_PRETTY_PRINT: ทำให้ JSON string มีรูปแบบที่อ่านง่ายด้วยการเพิ่ม indentation และ whitespaceJSON_UNESCAPED_UNICODE: ป้องกันการ escape ตัวอักษร Unicode (เช่น ภาษาไทย)JSON_UNESCAPED_SLASHES: ป้องกันการ escape เครื่องหมาย slash (/)
เราสามารถกำหนด options เหล่านี้โดยใช้ตัวดำเนินการ | (bitwise OR) เพื่อรวม options หลายๆ อย่างเข้าด้วยกัน
ตัวอย่างการใช้งาน options:
<?php
$data = array(
'name' => 'John Doe',
'age' => 30,
'city' => 'กรุงเทพ' // มีภาษาไทย
);
$json_string = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $json_string;
/* Output:
{
"name": "John Doe",
"age": 30,
"city": "กรุงเทพ"
}
*/
?>
ในตัวอย่างนี้ เราใช้ JSON_PRETTY_PRINT เพื่อให้ JSON string มีรูปแบบที่สวยงาม และ JSON_UNESCAPED_UNICODE เพื่อให้ภาษาไทยแสดงผลได้อย่างถูกต้อง
ตัวอย่างการสร้าง JSON String จากข้อมูลประเภทต่างๆ
json_encode() สามารถทำงานกับข้อมูล PHP ได้หลายประเภท ลองดูตัวอย่างเพิ่มเติม:
จาก Object
<?php
class Person {
public $name = 'Jane Doe';
public $age = 25;
}
$person = new Person();
$json_string = json_encode($person);
echo $json_string; // Output: {"name":"Jane Doe","age":25}
?>
ในตัวอย่างนี้ เราสร้าง class ที่ชื่อ Person และสร้าง object จาก class นี้ จากนั้นเราใช้ json_encode() เพื่อแปลง object ให้เป็น JSON string สังเกตว่าเฉพาะ public properties เท่านั้นที่จะถูกแปลง
จาก Array ซ้อน Array
<?php
$data = array(
'name' => 'John Doe',
'age' => 30,
'address' => array(
'street' => '123 Main St',
'city' => 'Anytown'
)
);
$json_string = json_encode($data);
echo $json_string; // Output: {"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown"}}
?>
ในตัวอย่างนี้ เรามี array ที่มี array ซ้อนอยู่ภายใน address ซึ่ง json_encode() ก็สามารถจัดการได้อย่างถูกต้อง
จากข้อมูลตัวเลขและ boolean
<?php
$data = array(
'id' => 123,
'is_active' => true,
'price' => 99.99
);
$json_string = json_encode($data);
echo $json_string; // Output: {"id":123,"is_active":true,"price":99.99}
?>
json_encode() จะแปลงตัวเลขและ boolean ให้เป็นค่าที่ถูกต้องใน JSON string (true และ false ไม่ใช่ "true" และ "false")
ข้อควรระวังในการใช้งาน json_encode()
- UTF-8 encoding: ตรวจสอบให้แน่ใจว่าข้อมูล PHP ของคุณอยู่ในรูปแบบ UTF-8 มิฉะนั้นอาจเกิดปัญหาในการแปลง JSON โดยเฉพาะกับภาษาอื่นๆ ที่ไม่ใช่ภาษาอังกฤษ
- Error handling:
json_encode()อาจคืนค่าfalseหากเกิดข้อผิดพลาด คุณควรตรวจสอบค่าที่คืนกลับมาเสมอ - Circular references: หากคุณพยายามแปลง object ที่มี circular references (object อ้างอิงถึงตัวเอง)
json_encode()จะไม่สามารถทำงานได้
ตัวอย่างการตรวจสอบ error:
<?php
$data = array(
'name' => 'John Doe',
'age' => 30
);
$json_string = json_encode($data);
if ($json_string === false) {
echo "Error encoding JSON: " . json_last_error_msg();
} else {
echo $json_string;
}
?>
ในตัวอย่างนี้ เราตรวจสอบว่า json_encode() คืนค่า false หรือไม่ หากเป็นเช่นนั้น เราจะแสดงข้อความแสดงข้อผิดพลาดโดยใช้ json_last_error_msg()
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการสร้าง JSON string จากข้อมูล PHP โดยใช้ฟังก์ชัน json_encode() เราได้เรียนรู้เกี่ยวกับการกำหนด options ต่างๆ เพื่อปรับแต่งการแปลง JSON และได้เห็นตัวอย่างการใช้งานกับข้อมูลประเภทต่างๆ นอกจากนี้ เรายังได้เรียนรู้ข้อควรระวังในการใช้งาน json_encode() เพื่อให้เราสามารถสร้าง JSON string ได้อย่างถูกต้องและมีประสิทธิภาพ ในบทต่อไป เราจะมาเรียนรู้วิธีการส่ง JSON response กลับไปยัง Client