Hướng dẫn php json parse

Hướng dẫn php json parse

Trong bài hướng dẫn tự học Lập trình PHP này, bạn sẽ dược học cách mã hóa (endcode)giải mã (decode) dữ liệu JSON với PHP.

Vậy,

JSON là từ viết tắt của Javascript Object Notation. JSON là một định dạng tiêu chuẩn trong trao đổi dữ liệu nhẹ, nhanh chóng và dễ dàng tạo (generate) và phân tích (parse).

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ả con người và máy tính.

Nhưng không giống như XML, các 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.

Dữ liệu kiểu JSON dựa trên hai cấu trúc cơ bản:

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

Trong JSON, các key luôn là các string, trong khi giá trị có thể là một string, number, true hoặc false, null, thậm chí là một Object hoặc một Array.

Các string 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 như thế này:

Ví dụ về JSON Object theo cấu trúc Object

{
    "book": {
        "Tên": "Lập trình viên PHP",
        "Chữ ký": "PHP Dev",
        "Năm": 2019,
        "Loại": "Công nghệ",
        "Nổi tiếng": true
    }
}
  • Xem lại: Object trong PHP

Ví dụ về JSON Object theo cấu trúc Array

{
    "Danh mục": [
        "PHP Cơ Bản",
        "PHP Nâng Cao",
        "PHP & MySQL",
        "Ví dụ thực tế"
    ]
}

Ghi chú:

Định dạng data-interchange là định dạng văn bản được sử dụng để trao đổi hoặc hoán đổ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.

Hướng dẫn php json parse
Hướng dẫn phân giải dữ liệu JSON với PHP

Phân giải JSON với PHP (JSON Parsing)

Cấu trúc dữ liệu JSON rất giống với mảng của PHP. PHP có các hàm dựng sẵn để encode và decode dữ liệu JSON.

Các hàm này lần lượt là json_encode()json_decode(). Cả hai chức năng chỉ hoạt động với dữ liệu chuỗi được mã hóa theo chuẩn UTF-8.

Endcoding dữ liệu JSON bằng PHP

Trong PHP, chúng ta sử dụng hàm json_encode() được sử dụng để mã hóa một giá trị thành định dạng JSON.

Giá trị được mã hóa có thể là bất kỳ loại dữ liệu PHP nào ngoại trừ tài nguyên như cơ sở dữ liệu hoặc liên quan đến xử lý tệp.

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:

27, "Đức"=>32, "Huyền"=>35, "Thúy"=>30);
 
echo json_encode($tuoiNhanVien);
?>

Kết quả nhận được như sau:

{"Khánh":27,"Đức":32,"Huyền":35,"Thúy":30}

Tương tự…

Bạn có thể mã hóa mảng chỉ số trong PHP thành một mảng JSON, như thế này:

Kết quả nhận được là:

["Đỏ","Xanh","Vàng","Lục","Lam"]

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

Kết quả nhận được là:

{"Đỏ","Xanh","Vàng","Lục","Lam"}

Như bạn có thể thấy trong các ví dụ trên, một mảng không kết hợp có thể được mã hóa thành 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.

Decoding dữ liệu JSON bằng PHP

Decoding dữ liệu JSON đơn giản như Endcoding nó. Bạn có thể sử dụng hàm json_decode() của PHP để chuyển đổi chuỗi được mã hóa JSON thành kiểu dữ liệu PHP phù hợp.

Ví dụ sau minh họa cách decoding hoặc chuyển đổi một đối tượng JSON thành đối tượng trong PHP.

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

object(stdClass)#1 (4) { ["Khánh"]=> int(27) ["Đức"]=> int(32) ["Huyền"]=> int(35) ["Thúy"]=> int(30) }

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 thiết lập là true => các đối tượng JSON thực được decoding thành các mảng kết hợp.
  • Còn mặc định là false

Đây là ví dụ:

Kết quả nhận được:

array(4) { ["Khánh"]=> int(27) ["Đức"]=> int(32) ["Huyền"]=> int(35) ["Thúy"]=> int(30) }

Tiếp theo, hãy xem một ví dụ sẽ chỉ cho bạn cách decoding JSON data và cách truy cập các phần tử riêng lẻ của đối tượng JSON hoặc mảng trong PHP.

Khánh;   // Output: 65
echo $obj->Đức;   // Output: 80
echo $obj->Huyền;    // Output: 78
echo $obj->Thúy;   // Output: 90
?>

Bạn cũng có thể lặp qua dữ liệu được decoding bằng vòng lặp foreach(), như thế này:

$value){
    echo $key . "=>" . $value . "
"; } echo "
"; // Decode JSON data thành đối tượng trong PHP $obj = json_decode($json); // Lặp qua đối tượng foreach($obj as $key=>$value){ echo $key . "=>" . $value . "
"; } ?>
  • Xem lại: Cách sử dụng Vòng lặp trong PHP

Hướng dẫn trích xuất các giá trị từ dữ liệu JSON lồng nhau trong PHP

Trong khi làm việc với JSON, các đối tượng và mảng JSON cũng có thể được lồng nhau. Một đối tượng JSON có thể tùy ý chứa các đối tượng JSON, 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 .

$value){
        if(is_array($value)){
            printValues($value);
        } else{
            $values[] = $value;
            $count++;
        }
    }
    
    // Trả về tổng số giá trị được tìm thấy trong Mảng
    return array('total' => $count, 'values' => $values);
}
 
// Gán chuỗi JSON được mã hóa cho một biến PHP
$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 Dữ liệu JSON thành định dạng mảng kết hợp
$arr = json_decode($json, true);
 
// Gọi hàm và in tất cả các giá trị
$result = printValues($arr);
echo "

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

"; echo implode("
", $result["values"]); echo "
"; // In giá trị riêng lẻ echo $arr["book"]["author"] . "
"; // Output: J. K. Rowling echo $arr["book"]["characters"][0] . "
"; // Output: Harry Potter echo $arr["book"]["price"]["hardcover"]; // Output: $20.32 ?>

Tổng kết

Như vậy là qua bài này bạn đã được học về cách endcode decode dữ liệu JSON trong PHP.

Đây là một dạng dữ liệu trao đổi giữa các nền tảng rất phổ biến. Hãy thực hành lại các ví dụ để chắc chắn bạn đã hiểu và nắm được các thao tác với dữ liệu JSON bằng PHP.

PHPDev