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. Show 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 PHPPHP 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 phpHà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:
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_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 PHPHàm này có chức năng
ngược lại hàm Ví dụ: Sử dụng hàm $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 3. Lời kếtNhư 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ì?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à key và value, đ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:
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:
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_decodeHà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:
Trong đó:
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_encodeHà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:
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 . " 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 PHPTrong 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 " |