Hướng dẫn dùng json count trong PHP

Bài trước chúng ta đã tìm hiểu được khái niệm JSON là gì rồi và cũng biết được cấu trúc chuỗi JSON như thế nào, vậy thì trong bài này chúng ta sẽ tìm hiểu xử lý JSON trong PHP như thế nào và các hàm xử lý JSON trong PHP từ căn bản đên nâng cao.

Hướng dẫn dùng json count trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Xử lý JSON trong PHP

PHP cũng là một ngôn ngữ lập trình nên nó cũng có cung cấp các thư viện xử lý JSON giúp lập trình viên giải quyết nó dễ dàng. Chúng ta có hai hàm đó là hàm json_decode và json_encode:

Hàm json_decode trong php

Hàm này mục đích chuyển một chuỗi JSON sang dạng mảng hoặc object, hàm này có cú pháp như sau: json_decode($json_string, $assoc). Trong đó:

  • $json_string: là chuỗi JSON
  • $assoc có hai giá trị true / false. Nếu true thì kết quả nó trả về là dạng  array, ngược lại nếu false thì kết quả trả về dạng object. Mặc định là false.

Ví dụ: Cho chuỗ JSON như sau:

Bài viết này được đăng tại [free tuts .net]

$json_string = 
'
    {
        "name" : "Nguyễn Văn Cường",
        "email" : "",
        "website" : "freetuts.net"
    }
';

Hãy dùng hàm json_decode để chuyển về dạng mảng và object. Bài giải như sau:

$json_string = 
'
    {
        "name" : "Nguyễn Văn Cường",
        "email" : "",
        "website" : "freetuts.net"
    }
';

// Dạng Mảng
var_dump(json_decode($json_string, true));

// Dạng Object
var_dump(json_decode($json_string));

Kết quả:

Hàm json_encode trong PHP

Hàm này có chức năng ngược lại hàm json_decode, nó sẽ chuyển một mảng trong PHP hoặc object trong PHP thành chuỗi JSON. Cú pháp như sau: json_encode($array), trong đó $array là mảng ban muốn chuyển đổi. Kết quả chuỗi JSON sẽ tự động chuyển các ký tự có dấu, các ký tự đặc biệt sang dạng an toàn nên bạn nhìn vào nó hơi khác. Xem ví dụ dưới đây.

Ví dụ: Sử dụng hàm json_encode để chuyển đổi mảng sau sang chuỗi JSON.

$array = array(
    "name" => "Nguyễn Văn Cường",
    "email" => "",
    "website" => "freetuts.net"  
);

Bài giải như sau:

$array = array(
    "name" => "Nguyễn Văn Cường",
    "email" => "",
    "website" => "freetuts.net"  
);

echo json_encode($array);

Kết quả:

2. Các ví dụ JSON trong PHP

Ứng dụng hay nhất của JSON trong PHP đó là dùng để xuất ra chuỗi JSON dưới dạng API để các client có thể lấy và xử lý, thông dụng nhất là ajax. Mình đã có một serie về xử lý JSON trong ajax trong serie ajax toàn tập nên các bạn đến serie đó để xem cách sử dụng JSON kết hợp ajax nhé.

Bây giờ ta sẽ thảo luận về cách lưu trữ JSON trong MYSQL. Thông thường chúng ta sẽ kết hợp hàm json_decode trong php để chuyển đổi một mảng các thông tin nào đó sang chuỗi JSON và lưu vào trong CSDL. Sau đó khi lấy thông tin từ MYSQL để hiển thị ra website thì chúng ta dùng hàm json_encode để chuyển đổi ngược trở lại. Như vậy khó khăn lớn nhất của những ban newbie chính là ý tưởng thiết kế CSDL như thế nào để lưu JSON? Thông thường những field nào mà cần tìm kiếm thông tin thì bạn nên tạo một field riêng, còn các thông tin mà không áp dụng trong tìm kiếm thì bạn có thể đưa nó vào một chuỗi JSON rồi lưu vào một field, như vậy sẽ giải được số lượng field.

3. Lời kết

Như vậy trong PHP cung cấp cho chúng ta hai hàm quan trọng đó là json_decode và json_encode, việc sử dụng nó thì rất là đơn giản, quan trọng là ý tưởng vận dụng nó khi xây dựng ứng dụng như thế nào. Chúc các bạn học tốt nhé.

Nội Dung

  • 1. JSON là gì?
  • 2. Xử lý JSON trong PHP
    • 2.1. Hàm json_decode
    • 2.2. Hàm json_encode
    • 2.3. Trích xuất giá trị từ dữ liệu JSON lồng nhau trong PHP

1. JSON là gì?

JSON là chữ viết tắt của Javascript Object Notation. Đây là một dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được. Bạn có thể sử dụng lưu nó vào một file, một record trong CSDL rất dễ dàng. 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) dễ dàng sử dụng và truy vấn hơn XML rất nhiều.

Vì định dạng JSON là một định dạng dựa trên văn bản, nó có thể dễ dàng được gửi đến và từ một máy chủ và được sử dụng làm định dạng dữ liệu bởi bất kỳ ngôn ngữ lập trình nào.

Ví dụ dưới đây mình định nghĩa một chuỗi JSON lưu trữ thông tin cá nhân của mình như sau, đây là ví dụ quan trọng nhất của phần json là gì.

{

"username" : "Thành Nguyễn",

"email" : "",

"website" : "Laptrinhtudau.com",

"title" : "Học lập trình với JSON"

}

Như vậy cú pháp của JSON rất đơn giản là mỗi thông tin dữ liệu sẽ có 2 phần đó là keyvalue, điều này tương ứng trong CSDL là tên field và giá trị của nó ở một record nào đó. Tuy nhiên nhìn qua thì đơn giản nhưng nếu ta nói kỹ về nó thì có một vài điều như sau:

  • Chuỗi JSON được bao lại bởi dấu ngoặc nhọn {}
  • Các key, value của JSON bắt buộc phải đặt trong dấu nháy kép {“}, nếu bạn đặt nó trong dấu nháy đơn thì đây không phải là một chuỗi JSON đúng chuẩn. Nên trường hợp trong value của bạn có chứa dấu nháy kép thì hãy dùng dấu (\) để đặt trước nó nhé, ví dụ học \”json là gì\” tại website laptrinhtudau.com.
  • Nếu có nhiều dữ liệu (nhiều cặp key => value) thì ta dùng dấu phẩy (,) để ngăn cách
  • Các key của JSON bạn nên đặt chữ cái không dấu hoặc số, dấu _ và không có khoảng trắng., ký tự đầu tiên không nên đặt là số. Điều này rất giống với nguyên tắc đặt tên biến trong PHP, các bạn có thể xem lại nhé!.

Như vậy ta có thể thấy dữ liệu của JSON được chia làm 2 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.
  • Array: Được định nghĩa là một danh sách các giá trị được sắp xếp.

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à \.

2.1. Hàm json_decode

Hàm json_decode() được sử dụng để giải mã một đối tượng JSON thành một đối tượng PHP hoặc một mảng kết hợp.

Cú pháp:

json_decode($json_string, $assoc);

Trong đó:

  • $json_string: là chuỗi JSON
  • $assoc có hai giá trị true / false. Nếu true thì kết quả nó trả về là dạng array, ngược lại nếu false thì kết quả trả về dạng object. Mặc định là false.

Ví dụ: ta dùng hàm json_decode để chuyển về dạng mảng và object:

$json_string = 
'
    {
        "name" : "Thành Nguyễn",
        "email" : "",
        "website" : "laptrinhtudau.com"
    }
';
// Dạng Mảng
var_dump(json_decode($json_string, true));
// Dạng Object
var_dump(json_decode($json_string));

2.2. Hàm json_encode

Hàm này có chức năng ngược lại hàm json_decode, nó sẽ chuyển một mảng trong PHP hoặc object trong PHP thành chuỗi 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.

Cú pháp:

json_encode($array);

Trong đó: $array là mảng mà ta muốn chuyển đổi. Kết quả chuỗi JSON sẽ tự động chuyển các ký tự có dấu, các ký tự đặc biệt sang dạng an toàn nên bạn nhìn vào nó hơi khác.

Ví dụ: Sử dụng hàm json_encode để chuyển đổi mảng sau sang chuỗi JSON:

$array = array(
    "name" => "Thành Nguyễn",
    "email" => "",
    "website" => "laptrinhtudau.com" 
); 
echo json_encode($array);

Ví dụ tiếp theo là 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 . "
"; } ?>

Thông thường chúng ta sẽ kết hợp hàm json_decode trong php để chuyển đổi một mảng các thông tin nào đó sang chuỗi JSON và lưu vào trong CSDL. Sau đó khi lấy thông tin từ MYSQL để hiển thị ra website thì chúng ta dùng hàm json_encode để chuyển đổi ngược trở lại. Như vậy khó khăn lớn nhất của những bạn mới học chính là ý tưởng thiết kế CSDL như thế nào để lưu JSON? Thông thường những field nào mà cần tìm kiếm thông tin thì bạn nên tạo một field riêng. Còn các thông tin mà không áp dụng trong tìm kiếm thì bạn có thể đưa nó vào một chuỗi JSON rồi lưu vào một field. Như vậy sẽ giải được số lượng field.

2.3. Trích xuất 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í dụ: Ta sẽ giải mã các đối tượng JSON lồng nhau và in tất cả các giá trị 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 ?>