1. JSON là gì?
JSON (JavaScript Object Notation) là một định dạng dữ liệu văn bản được sử dụng để trao đổi dữ liệu giữa máy khách và máy chủ. Nó nhẹ, dễ đọc và dễ xử lý, thường được sử dụng trong các API để gửi và nhận dữ liệu. PHP cung cấp các hàm tích hợp để làm việc với JSON, bao gồm cả việc mã hóa (encode) và giải mã (decode) dữ liệu.
Trong bài viết này, chúng ta sẽ tìm hiểu cách làm việc với JSON trong PHP, từ việc chuyển đổi dữ liệu PHP thành JSON, đến việc chuyển đổi dữ liệu JSON thành dữ liệu PHP.
2. Cú pháp JSON
Một đối tượng JSON thường bao gồm cặp giá trị key-value, với các key được đặt trong dấu ngoặc kép và value có thể là các giá trị như chuỗi (string), số (number), boolean, mảng (array), hoặc đối tượng (object).
Ví dụ về JSON:
{
"name": "John Doe",
"age": 30,
"is_student": false,
"courses": ["PHP", "JavaScript", "HTML"]
}Trong ví dụ trên:
namelà một chuỗi.agelà một số.is_studentlà một giá trị boolean.courseslà một mảng.
3. Chuyển đổi dữ liệu PHP thành JSON
PHP cung cấp hàm json_encode() để chuyển đổi dữ liệu từ PHP sang JSON.
Ví dụ 1: Chuyển đổi một mảng PHP thành JSON
// Mảng PHP
$data = [
"name" => "John Doe",
"age" => 30,
"is_student" => false,
"courses" => ["PHP", "JavaScript", "HTML"]
];
// Chuyển đổi thành JSON
$json_data = json_encode($data);
echo $json_data;Kết quả:
{"name":"John Doe","age":30,"is_student":false,"courses":["PHP","JavaScript","HTML"]}Ví dụ 2: Chuyển đổi một đối tượng PHP thành JSON
class User {
public $name;
public $age;
public $is_student;
public function __construct($name, $age, $is_student) {
$this->name = $name;
$this->age = $age;
$this->is_student = $is_student;
}
}
$user = new User("Jane Doe", 25, true);
// Chuyển đổi đối tượng thành JSON
$json_data = json_encode($user);
echo $json_data;Kết quả:
{"name":"Jane Doe","age":25,"is_student":true}Tùy chọn bổ sung khi sử dụng json_encode()
Bạn có thể thêm một số tùy chọn để định dạng JSON một cách dễ đọc hơn. Ví dụ, sử dụng JSON_PRETTY_PRINT để làm cho JSON dễ nhìn.
$json_data = json_encode($data, JSON_PRETTY_PRINT);
echo $json_data;Kết quả (dạng đẹp):
{
"name": "John Doe",
"age": 30,
"is_student": false,
"courses": [
"PHP",
"JavaScript",
"HTML"
]
}4. Chuyển đổi dữ liệu JSON thành PHP
Để chuyển đổi JSON thành dữ liệu PHP, bạn sử dụng hàm json_decode(). Hàm này sẽ chuyển đổi chuỗi JSON thành một mảng hoặc một đối tượng PHP.
Ví dụ 3: Chuyển đổi JSON thành mảng PHP
$json_data = '{"name":"John Doe","age":30,"is_student":false,"courses":["PHP","JavaScript","HTML"]}';
// Chuyển đổi thành mảng PHP
$array_data = json_decode($json_data, true);
print_r($array_data);Kết quả:
Array
(
[name] => John Doe
[age] => 30
[is_student] =>
[courses] => Array
(
[0] => PHP
[1] => JavaScript
[2] => HTML
)
)Ví dụ 4: Chuyển đổi JSON thành đối tượng PHP
Nếu bạn không truyền tham số thứ hai là true, json_decode() sẽ trả về đối tượng PHP thay vì mảng.
$json_data = '{"name":"John Doe","age":30,"is_student":false,"courses":["PHP","JavaScript","HTML"]}';
// Chuyển đổi thành đối tượng PHP
$object_data = json_decode($json_data);
echo $object_data->name; // Truy cập thuộc tính của đối tượngKết quả:
John Doe5. Làm việc với dữ liệu JSON phức tạp
JSON có thể chứa các cấu trúc dữ liệu phức tạp như mảng lồng nhau hoặc đối tượng trong đối tượng. PHP hoàn toàn có thể xử lý điều này.
Ví dụ 5: JSON phức tạp
$json_data = '
{
"company": {
"name": "TechCorp",
"employees": [
{
"name": "Alice",
"position": "Developer"
},
{
"name": "Bob",
"position": "Designer"
}
]
}
}';
// Chuyển đổi JSON thành đối tượng PHP
$data = json_decode($json_data);
// Truy cập dữ liệu
echo $data->company->name; // Kết quả: TechCorp
echo $data->company->employees[0]->name; // Kết quả: Alice6. Xử lý lỗi với JSON
Hàm json_encode() và json_decode() có thể gặp lỗi khi xử lý JSON không hợp lệ. PHP cung cấp hàm json_last_error() để kiểm tra lỗi.
Ví dụ 6: Kiểm tra lỗi
$json_data = '{"name":"John Doe", "age":30, "is_student":false'; // JSON bị thiếu dấu ngoặc đóng
// Thử giải mã JSON
$data = json_decode($json_data);
// Kiểm tra lỗi
if (json_last_error() != JSON_ERROR_NONE) {
echo "JSON Error: " . json_last_error_msg();
}Kết quả:
JSON Error: Syntax error7. Gửi và nhận JSON qua HTTP (API)
PHP cũng thường được sử dụng để làm việc với dữ liệu JSON khi gửi và nhận từ các API.
Ví dụ 7: Gửi dữ liệu JSON qua HTTP
Để gửi dữ liệu JSON đến một API, bạn có thể sử dụng cURL:
$url = "https://api.example.com/endpoint";
// Dữ liệu cần gửi
$data = [
"name" => "John Doe",
"age" => 30,
"is_student" => false
];
// Chuyển đổi thành JSON
$json_data = json_encode($data);
// Thiết lập cURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
// Gửi yêu cầu và nhận phản hồi
$response = curl_exec($ch);
curl_close($ch);
// Xử lý phản hồi
echo $response;8. Kết luận
JSON là một công cụ mạnh mẽ trong lập trình PHP, cho phép bạn dễ dàng trao đổi dữ liệu giữa máy chủ và máy khách, hoặc giữa các service web. PHP cung cấp các hàm như json_encode() và json_decode() giúp bạn dễ dàng chuyển đổi dữ liệu giữa PHP và JSON. Việc xử lý dữ liệu JSON là một kỹ năng thiết yếu cho bất kỳ nhà phát triển web nào, đặc biệt khi làm việc với các API hoặc ứng dụng web hiện đại.
Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về cách làm việc với JSON trong PHP và có thể áp dụng vào các dự án thực tế của mình.
Chúc bạn học tập hiệu quả trên CodeTutHub!









