Hàm json_decode PHP dùng để giải mã 1 chuỗi JSON . Kết quả trả về của json_decode có thể là 1 mảng hoặc 1 đối tượng. Trái ngược với hàm json_decode là hàm json_encode – hàm để mã hóa thành chuỗi json.
Để nhận và giải mã chuỗi đã mã hóa JSON, người ta sử dụng hàm json_decode. Giải mã nói một cách đơn giản là khôi phục dữ liệu đã được mã hoá trở về bản gốc
json_decode ( string$json
[, bool$assoc
=FALSE
[, int$depth
= 512 [, int$options
= 0 ]]] ) : mixed
json
Chuỗi cần conver thành JSON.assoc
Khi để là TRUE, các đối tượng được trả về sẽ được chuyển đổi thành các mảng kết hợp.JSON_HEX_QUOT
, JSON_HEX_TAG
, JSON_HEX_AMP
, JSON_HEX_APOS
, JSON_NUMERIC_CHECK
, JSON_PRETTY_PRINT
, JSON_UNESCAPED_SLASHES
, JSON_FORCE_OBJECT
, JSON_PRESERVE_ZERO_FRACTION
, JSON_UNESCAPED_UNICODE
, JSON_PARTIAL_OUTPUT_ON_ERROR
Lưu ý: khi tham số return được sử dụng, hàm này sử dụng bên trong bộ đệm đầu ra, do đó không thể sử dụng nó trong hàm gọi lại ob_start ().
JSON_INVALID_UTF8_IGNORE
, and JSON_INVALID_UTF8_SUBSTITUTE
đã được thêm vào.JSON_BIGINT_AS_STRING
và JSON_OBJECT_AS_ARRAY
được thêm vào.<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
Truy cập các phần tử trong một đối tượng có chứa các ký tự không được phép theo quy ước đặt tên của PHP (ví dụ: dấu gạch nối) có thể được thực hiện bằng cách đóng gói tên phần tử trong dấu ngoặc nhọn và dấu nháy đơn.
code:
?php $json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345 ?>
code:
<?php // các chuỗi sau là JavaScript hợp lệ nhưng JSON không hợp lệ // tên và giá trị phải được đặt trong dấu ngoặc kép // dấu ngoặc đơn không hợp lệ $bad_json = "{'bar': 'baz'}"; json_decode ($ bad_json); // vô giá trị // tên phải được đặt trong dấu ngoặc kép $bad_json = '{bar: "baz"}'; json_decode ($ bad_json); // vô giá trị // dấu phẩy không được phép $bad_json = '{bar: "baz",}'; json_decode ($bad_json); // vô giá trị ?>
code:
$json = json_encode( array( 1 => array( 'English' => array( 'One', 'January' ), 'French' => array( 'Une', 'Janvier' ) ) ) ); // Xác định các lỗi. $constants = get_defined_constants(true); $json_errors = array(); foreach ($constants["json"] as $name => $value) { if (!strncmp($name, "JSON_ERROR_", 11)) { $json_errors[$value] = $name; } } // Hiển thị các lỗi cho độ sâu khác nhau. foreach (range(4, 3, -1) as $depth) { var_dump(json_decode($json, true, $depth)); echo 'Last error: ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL; } ?>
Kết quả:
array(1) { [1]=> array(2) { ["English"]=> array(2) { [0]=> string(3) "One" [1]=> string(7) "January" } ["French"]=> array(2) { [0]=> string(3) "Une" [1]=> string(7) "Janvier" } } } Last error: JSON_ERROR_NONE NULL Last error: JSON_ERROR_DEPTH
code:
<?php $json = '{"number": 12345678901234567890}'; var_dump(json_decode($json)); var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING)); ?>
Kết quả:
object(stdClass)#1 (1) { ["number"]=> float(1.2345678901235E+19) } object(stdClass)#1 (1) { ["number"]=> string(20) "12345678901234567890" }
<?php $contents = file_get_contents($url); $contents = utf8_encode($contents); $results = json_decode($contents); ?>
Đôi khi, tôi cần cho phép bình luận trong tập tin json. Vì vậy, tôi đã viết một func nhỏ để xóa các bình luận trong chuỗi json trước khi giải mã nó:
<?php function json_clean_decode($json, $assoc = false, $depth = 512, $options = 0) { // search and remove comments like /* */ and // $json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json); if(version_compare(phpversion(), '5.4.0', '>=')) { $json = json_decode($json, $assoc, $depth, $options); } elseif(version_compare(phpversion(), '5.3.0', '>=')) { $json = json_decode($json, $assoc, $depth); } else { $json = json_decode($json, $assoc); } return $json; } ?>
Các bạn có thể xem chi tiết hơn trên php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm json_decode() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé.
Cảm ơn các bạn đã ghé thăm codetutam.com
Bình luận: