Hướng dẫn json trong php

Chuyển array thành json string

Array thành json string

$user = [
    'id' => 1,
    'username' => 'admin',
];

echo json_encode($user);

Kết quả:

{"id":1,"username":"admin"}

Nếu muốn format đẹp hơn ta cho thêm tham số:

echo json_encode($user, JSON_PRETTY_PRINT);

Kết quả:

{
    "id": 1,
    "username": "admin"
}

Chuyển ngược lại json string thành array

Cách thực hiện đơn giản như sau:

$json = '{"id":1,"username":"admin"}';
$user = json_decode($json, true);

Tham số thứ 2 true của hàm json_decode là để hàm trả về kết quả là array.

Chuyển Object thành json string

Encode

Ta giả sử có class user như sau:

class User {
    public $id;
    public $username;
}

Sử dụng class như sau:

$user = new User();
$user->id = 1;
$user->username = 'admin';

echo json_encode($user);

Ta cũng sẽ được kết quả tương tự như trên:

`{"id":1,"username":"admin"}

Decode

Vậy làm sao để decode được json to object của class User Có khá nhiều cách nhưng cách đơn giản và hiệu quả nhất như sau:

// Khai báo class
class User {
    public $id;
    public $username;
}

// json string
$json = '{"id":1,"username":"admin"}';

// thực hiện decode như ở trên
$data = json_decode($json, true);

// tạo object User
$user = new User();

// Gắn dữ liệu vào object User
foreach ($data as $key => $value) {
    $user->{$key} = $value;
}

// Thu được kết quả
var_export($user);

Kết quả:

User::__set_state(array(
   'id' => 1,
   'username' => 'admin',
))

---

Phuc Tran Hoang

  • Trang chủ
  • Lập trình PHP
  • Cú pháp JSON trong PHP

Trong hướng dẫn này, bạn sẽ học cách mã hóa và giải mã dữ liệu JSON trong PHP.

JSON là gì?

JSON là viết tắt của Java Script Object Notation. JSON là một định dạng trao đổi dữ liệu nhẹ tiêu chuẩn, nhanh chóng và dễ dàng để phân tích cú pháp và tạo.

JSON, giống như XML, là một định dạng dựa trên văn bản dễ viết và dễ hiểu cho cả người và máy tính, nhưng không giống như XML, cấu trúc dữ liệu JSON chiếm ít băng thông hơn các phiên bản XML của chúng. JSON dựa trên hai cấu trúc cơ bản:

  • Đối tượng: Đây được định nghĩa là một tập hợp các cặp khóa / giá trị (tức là key:value). Mỗi đối tượng bắt đầu bằng dấu ngoặc nhọn bên trái { và kết thúc bằng dấu ngoặc nhọn bên phải }. Nhiều cặp khóa / giá trị được phân tách bằng dấu phẩy ,.
  • Mảng: Đây được định nghĩa là một danh sách các giá trị có thứ tự. Một mảng bắt đầu bằng dấu ngoặc vuông bên trái [ và kết thúc bằng dấu ngoặc vuông bên phải ]. Các giá trị được phân tách bằng dấu phẩy ,.

Trong JSON, khóa luôn là chuỗi, trong khi giá trị có thể là một string, number, true hay false, null hoặc thậm chí một object hoặc một array. Các chuỗi phải được đặt trong dấu ngoặc kép " và có thể chứa các ký tự thoát như \n, \t và \. Một đối tượng JSON có thể trông giống như sau:

Ví dụ

{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "genre": "Fantasy Fiction",
        "bestseller": true
    }
}

Trong khi một ví dụ về mảng JSON sẽ trông giống như sau:

Ví dụ

{
    "fruits": [
        "Apple",
        "Banana",
        "Strawberry",
        "Mango"
    ]
}

Mẹo: Định dạng trao đổi dữ liệu là một định dạng văn bản được sử dụng để trao đổi hoặc trao đổi dữ liệu giữa các nền tảng và hệ điều hành khác nhau. JSON là định dạng trao đổi dữ liệu nhẹ và phổ biến nhất cho các ứng dụng web.

Phân tích cú pháp JSON với PHP

Cấu trúc dữ liệu JSON rất giống với mảng PHP. PHP có sẵn các hàm để mã hóa và giải mã dữ liệu JSON. Các chức năng này lần lượt là json_encode() json_decode(). Cả hai hàm chỉ hoạt động với dữ liệu chuỗi được mã hóa UTF-8.

Mã hóa dữ liệu JSON bằng PHP

Trong PHP, hàm json_encode() được sử dụng để mã hóa một giá trị sang định dạng JSON. Giá trị đang được mã hóa có thể là bất kỳ kiểu dữ liệu PHP nào ngoại trừ một tài nguyên, như cơ sở dữ liệu hoặc tệp xử lý. Ví dụ dưới đây trình bày cách mã hóa một mảng kết hợp PHP thành một đối tượng JSON:

Ví dụ

65, "Harry"=>80, "John"=>78, "Clark"=>90);
 
echo json_encode($marks);
?>

Kết quả của ví dụ trên sẽ giống như sau:

{"Peter": 65, "Harry": 80, "John": 78, "Clark": 90}

Tương tự, bạn có thể mã hóa mảng được lập chỉ mục PHP thành một mảng JSON, như sau:

Ví dụ

Kết quả của ví dụ trên sẽ giống như sau:

["Red", "Green", "Blue", "Orange", "Yellow"]

Bạn cũng có thể buộc hàm json_encode() trả về một mảng được lập chỉ mục PHP dưới dạng đối tượng JSON bằng cách sử dụng tùy chọn JSON_FORCE_OBJECT, như được hiển thị trong ví dụ dưới đây:

Ví dụ

Kết quả của ví dụ trên sẽ giống như sau:

{"0": "Red", "1": "Green", "2": "Blue", "3": "Orange"}

Như bạn có thể thấy trong các ví dụ trên, một mảng không liên kết có thể được mã hóa dưới dạng mảng hoặc đối tượng. Tuy nhiên, một mảng kết hợp luôn được mã hóa dưới dạng đối tượng.

Giải mã dữ liệu JSON trong PHP

Giải mã dữ liệu JSON cũng đơn giản như mã hóa nó. Bạn có thể sử dụng hàm PHP json_decode() để chuyển đổi chuỗi được mã hóa JSON thành kiểu dữ liệu PHP thích hợp. Ví dụ sau đây trình bày cách giải mã hoặc chuyển đổi một đối tượng JSON thành đối tượng PHP.

Ví dụ

Kết quả của ví dụ trên sẽ giống như sau:

object (stdClass) # 1 (4) {["Peter"] => int (65) ["Harry"] => int (80) ["John"] => int (78) ["Clark"] => int (90)}

Theo mặc định, hàm json_decode() trả về một đối tượng. Tuy nhiên, bạn có thể tùy ý chỉ định tham số thứ hai $assoc chấp nhận giá trị boolean mà khi được đặt đối tượng là true JSON được giải mã thành các mảng kết hợp. Nó là false trả về theo mặc định. Đây là một ví dụ:

Ví dụ

Kết quả của ví dụ trên sẽ giống như sau:

array (4) {["Peter"] => int (65) ["Harry"] => int (80) ["John"] => int (78) ["Clark"] => int (90)}

Bây giờ chúng ta hãy xem một ví dụ sẽ chỉ cho bạn cách giải mã dữ liệu JSON và truy cập các phần tử riêng lẻ của đối tượng hoặc mảng JSON trong PHP.

Ví dụ

Peter;   // Output: 65
echo $obj->Harry;   // Output: 80
echo $obj->John;    // Output: 78
echo $obj->Clark;   // Output: 90
?>

Bạn cũng có thể lặp lại dữ liệu đã giải mã bằng vòng lặp foreach(), như sau:

Ví dụ

$value){
    echo $key . "=>" . $value . "
"; } echo "
"; // Decode JSON data to PHP object $obj = json_decode($json); // Loop through the object foreach($obj as $key=>$value){ echo $key . "=>" . $value . "
"; } ?>

Trích xuất giá trị từ dữ liệu JSON lồng nhau trong PHP

Các đối tượng và mảng JSON cũng có thể được lồng vào nhau. Một đối tượng JSON có thể tùy ý chứa các đối tượng JSON khác, mảng, mảng lồng nhau, mảng đối tượng JSON, v.v. Ví dụ sau sẽ chỉ cho bạn cách giải mã một đối tượng JSON lồng nhau và in tất cả các giá trị của nó trong PHP.

Ví dụ

$value){
        if(is_array($value)){
            printValues($value);
        } else{
            $values[] = $value;
            $count++;
        }
    }
    
    // Return total count and values found in array
    return array('total' => $count, 'values' => $values);
}
 
// Assign JSON encoded string to a PHP variable
$json = '{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"],
        "genre": "Fantasy Fiction",
        "price": {
            "paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11"
        }
    }
}';
// Decode JSON data into PHP associative array format
$arr = json_decode($json, true);
 
// Call the function and print all the values
$result = printValues($arr);
echo "

" . $result["total"] . " value(s) found:

"; echo implode("
", $result["values"]); echo "
"; // Print a single value echo $arr["book"]["author"] . "
"; // Output: J. K. Rowling echo $arr["book"]["characters"][0] . "
"; // Output: Harry Potter echo $arr["book"]["price"]["hardcover"]; // Output: $20.32 ?>

Bài viết này đã giúp ích cho bạn?