Hàm json_decode() trong PHP
Trần Thị Vân
- 1247
- 05/08/2025
Chức năng của Hàm json_decode() trong PHP
Hàm json_decode() trong PHP dùng để chuyển chuỗi json sang kiểu dữ liệu đối tượng hoặc kiểu dữ liệu mảng.
Cú pháp của Hàm json_decode() trong PHP
$đối_tượng = json_decode($chuỗi_json);
$chuỗi_json: Biến chuỗi JSON.
$đối_tượng: Trả kết quả về đối tượng.
$kết_quả = json_decode($chuỗi_json, trường_hợp);
$chuỗi_json: Biến chuỗi JSON.
trường_hợp: true trả về mảng, false trả về đối tượng
$kết_quả: Kết quả trả về, nếu trường_hợp là true trả về mảng, nếu trường_hợp là false trả về đối tượng.
Ví dụ Hàm json_decode() trong PHP
<?php
$chuoijson1 = '{"Lực":35,"Vân":29,"Quỳnh":1,"Dung":29,"Hạ":1}';
$chuoijson2 = '{"ten":"Bùi Tấn Lực","tuoi":"35"}';
?>
<h2>Chuyển chuỗi JSON sang kiểu dữ liệu mảng</h2>
<?php
$mang1 = json_decode($chuoijson1, true);
print_r($mang1); // Kết quả: Array ( [Lực] => 35 [Vân] => 29 [Quỳnh] => 1 [Dung] => 29 [Hạ] => 1 )
echo "<br>";
$mang2 = json_decode($chuoijson2, true);
print_r($mang2); // Kết quả: Array ( [ten] => Bùi Tấn Lực [tuoi] => 35 )
echo "<br>";
?>
<h2>Chuyển chuỗi JSON sang kiểu dữ liệu đối tượng</h2>
<?php
$doituong1 = json_decode($chuoijson1);
print_r($doituong1); // Kết quả: stdClass Object ( [Lực] => 35 [Vân] => 29 [Quỳnh] => 1 [Dung] => 29 [Hạ] => 1 )
echo "<br>";
$doituong2 = json_decode($chuoijson2, false);
var_dump($doituong2); // Kết quả: object(stdClass)#3 (2) { ["ten"]=> string(16) "Bùi Tấn Lực" ["tuoi"]=> string(2) "35" }
echo "<br>";
echo $doituong2->ten; // Kết quả: Bùi Tấn Lực
?>
Kết quả:
/////Chuyển chuỗi JSON sang kiểu dữ liệu mảng
Array ( [Lực] => 35 [Vân] => 29 [Quỳnh] => 1 [Dung] => 29 [Hạ] => 1 )
Array ( [ten] => Bùi Tấn Lực [tuoi] => 35 )
/////Chuyển chuỗi JSON sang kiểu dữ liệu đối tượng
stdClass Object ( [Lực] => 35 [Vân] => 29 [Quỳnh] => 1 [Dung] => 29 [Hạ] => 1 )
object(stdClass)#3 (2) { ["ten"]=> string(16) "Bùi Tấn Lực" ["tuoi"]=> string(2) "35" }
Bùi Tấn Lực
Xử lý lỗi khi sử dụng hàm json_decode() trong PHP
Khi dữ liệu JSON không đúng định dạng, json_decode() có thể trả về null thay vì dữ liệu mong muốn. Vì vậy, sau khi giải mã, nên kiểm tra kết quả và xác định nguyên nhân nếu dữ liệu không được xử lý như dự kiến.
Kiểm tra kết quả trả về của hàm json_decode()
Một cách đơn giản là kiểm tra giá trị nhận được sau khi gọi json_decode(). Nếu chuỗi JSON hợp lệ, PHP sẽ trả về mảng hoặc đối tượng tùy cách sử dụng hàm. Ngược lại, kết quả có thể là null.
<?php
$json = '{"name":"Web Mới","status":"active"}';
$data = json_decode($json, true);
if ($data === null) {
echo 'Không thể giải mã dữ liệu JSON';
} else {
echo $data['name'];
}
?>
Nên sử dụng phép so sánh === null thay vì chỉ kiểm tra bằng if (!$data), bởi một dữ liệu JSON hợp lệ hoàn toàn có thể giải mã thành giá trị rỗng, false, 0 hoặc chuỗi rỗng.
Xác định chuỗi JSON không hợp lệ
Không phải mọi chuỗi có dạng gần giống JSON đều có thể được PHP giải mã. Chỉ một ký tự sai vị trí, dấu ngoặc thiếu hoặc cách đặt dấu nháy không đúng cũng có thể khiến quá trình xử lý thất bại.
<?php
$json = '{"name":"Web Mới", "status":"active"';
$data = json_decode($json, true);
if ($data === null) {
echo 'Dữ liệu JSON không hợp lệ';
}
?>
Khi dữ liệu JSON được nhận từ biểu mẫu, API hoặc nguồn bên ngoài, nên kiểm tra dữ liệu trước khi tiếp tục sử dụng. Cách này giúp tránh việc chương trình âm thầm xử lý một giá trị null và gây ra lỗi ở những phần khác.
Sử dụng json_last_error() để kiểm tra lỗi
Khi json_decode() không xử lý thành công, json_last_error() giúp xác định loại lỗi xảy ra trong lần giải mã JSON gần nhất. Đây là cách hữu ích khi cần tìm nguyên nhân thay vì chỉ biết rằng kết quả trả về là null.
<?php
$json = '{"name":"Web Mới"';
$data = json_decode($json, true);
if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg();
}
?>
Trong đó, json_last_error() trả về mã lỗi, còn json_last_error_msg() cung cấp thông báo dễ đọc hơn. Khi phát triển hoặc kiểm tra dữ liệu từ API, việc sử dụng các hàm này giúp nhanh chóng tìm ra vấn đề trong chuỗi JSON.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm json_decode() trong PHP.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *