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:

json
{
    "name": "John Doe",
    "age": 30,
    "is_student": false,
    "courses": ["PHP", "JavaScript", "HTML"]
}

Trong ví dụ trên:

  • name là một chuỗi.
  • age là một số.
  • is_student là một giá trị boolean.
  • courses là 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

php
// 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ả:

json
{"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

php
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ả:

json
{"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.

php
$json_data = json_encode($data, JSON_PRETTY_PRINT);

echo $json_data;

Kết quả (dạng đẹp):

json
{
    "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

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ả:

php
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.

php
$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ượng

Kết quả:

php
John Doe

5. 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

php
$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ả: Alice

6. Xử lý lỗi với JSON

Hàm json_encode()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

php
$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ả:

php
JSON Error: Syntax error

7. 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:

php
$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()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!