Hàm json_encode trong PHP là hàm dùng chuyển đổi đối tượng, mảng thành chuỗi dạng JSON. Hàm json_encode thường được sử dụng trong quá trình lưu trữ dữ liệu phức tạp, hoặc sử dụng trong việc viết API cho web, app.
Ngược lại với hàm json_encode là hàm json_decode trong php.
Định Nghĩa.
Để convert giá trị chỉ định thành định dạng JSON, người ta sử dụng hàm số json_encode. Hàm số json_encode được viết như sau:
Cú pháp sử dụng hàm json_encode trong PHP
Cú pháp:
json_encode ( mixed$value
[, int$options
= 0 [, int$depth
= 512 ]] ) : string
Trong đó:
- Biến thứ nhất value: Giá trị encode. Chỉ định string hoặc array để convert sang định dạng JSONCó thể chỉ định giá trị tùy ý khác với định dạng resource Tất cả data dạng chuỗi phải encoding bằng UTF-8.
- Biến thứ 2 options: Set được việc sẽ convert theo định dạng như thế nào và có thể chỉ định được constant bằng các option.
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
- Biến thứ 3 depth: Chỉ định được max depth bằng số nguyên.
Giá trị trả về.
- Giá trị trả về: Hàm json_encode trả về giá trị đã encode JSON, trường hợp xử lý lỗi sẽ trả về FALSE.
Lưu ý: Tất cả các string data convert phải được encode thành encoding UTR-8.
Sự thay đổi hàm json_encode qua các phiên bản PHP
- 7.3.0 options
JSON_THROW_ON_ERROR
được thêm vào
- 7.2.0 options
JSON_INVALID_UTF8_IGNORE
, andJSON_INVALID_UTF8_SUBSTITUTE
đã được thêm vào. - 7.1.0
JSON_UNESCAPED_LINE_TERMINATORS
options này đã được thêm vào. - 7.1.0 serialize_precision đã được sử dụng thay vì sử dụng precision khi mã hóa giá trị kép.
- 5.6.0
JSON_PRESERVE_ZERO_FRACTION
options này đã được thêm vào. - 5.5.0 tham số depth đã được sử dụng.
- 5.5.0
JSON_PRESERVE_ZERO_FRACTION
options này đã được sử dụng. - 5.5.0 Khi giá trị gây ra lỗi mã hóa JSON, FALSE được trả về thay vì đầu ra một phần, trừ khi các tùy chọn chứa JSON_PARTIAL_OUTPUT_ON_ERROR. Xem json_last_error () để biết danh sách đầy đủ các lý do có thể khiến mã hóa JSON bị lỗi. Một trong những lý do thất bại tiềm năng là giá trị chứa các chuỗi chứa UTF-8 không hợp lệ.
- 5.5.0
E_WARNING
không còn hợp lệ khi sử dụng cho một giá trị lỗi. - 5.5.0 Giá trị trả về khi thất bại đã được thay đổi từ chuỗi NULL thành FALSE.
- 5.4.0 options
JSON_PRETTY_PRINT
,JSON_UNESCAPED_SLASHES
, andJSON_UNESCAPED_UNICODE
được thêm vào. - 5.3.0 options
JSON_NUMERIC_CHECK
đã được sử dụng. - 5.3.0 options
JSON_FORCE_OBJECT
,JSON_HEX_AMP
,JSON_HEX_APOS
,JSON_HEX_QUOT
, andJSON_HEX_TAG
đã được sử dụng.
- 5.3.0 tham số options đã được sử dụng.
Hướng dẫn sử dụng hàm json_encode php
Ví dụ 1 dùng hàm json_encode() bình thương.
code:
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
Kết quả:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Ví dụ 2 json_encode() , ví dụ hiển thị vài option đang sử dụng.
code:
<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";
$b = array();
echo "Empty array output as array: ", json_encode($b), "\n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Non-associative array output as array: ", json_encode($c), "\n";
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>
Kết quả:
Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] Unicode: ["<foo>","'bar'","\"baz\"","&blong&","e"] All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","e"] Empty array output as array: [] Empty array output as object: {} Non-associative array output as array: [[1,2,3]] Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}} Associative array always output as object: {"foo":"bar","baz":"long"} Associative array always output as object: {"foo":"bar","baz":"long"}
Ví dụ 3 sử dụng tùy chọn JSON_NUMERIC_CHECK.
code:
<?php echo "Strings representing numbers automatically turned into numbers".PHP_EOL; $numbers = array('+123123', '-123123', '1.2e3', '0.00001'); var_dump( $numbers, json_encode($numbers, JSON_NUMERIC_CHECK) ); echo "Strings containing improperly formatted numbers".PHP_EOL; $strings = array('+a33123456789', 'a123'); var_dump( $strings, json_encode($strings, JSON_NUMERIC_CHECK) ); ?>
Kết quả:
Strings representing numbers automatically turned into numbers array(4) { [0]=> string(7) "+123123" [1]=> string(7) "-123123" [2]=> string(5) "1.2e3" [3]=> string(7) "0.00001" } string(28) "[123123,-123123,1200,1.0e-5]" Strings containing improperly formatted numbers array(2) { [0]=> string(13) "+a33123456789" [1]=> string(4) "a123" } string(24) "["+a33123456789","a123"]"
Ví dụ 4 sử dụng với options JSON_PRESERVE_ZERO_FRACTION.
code:
<?php var_dump(json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION)); var_dump(json_encode(12.0)); ?>
Kết quả:
string(4) "12.0" string(2) "12"
Chú ý
- Trong trường hợp không giải mã được, json_last_error () có thể được sử dụng để xác định bản chất chính xác của lỗi.
- Khi mã hóa một mảng, nếu các khóa không phải là một chuỗi số liên tục bắt đầu từ 0, tất cả các khóa được mã hóa dưới dạng chuỗi và được chỉ định rõ ràng cho từng cặp giá trị khóa.
-
Giống như bộ mã hóa JSON tham chiếu, json_encode () sẽ tạo JSON là một giá trị đơn giản (nghĩa là không phải đối tượng hay mảng) nếu được cung cấp một chuỗi, số nguyên, float hoặc boolean làm giá trị đầu vào. Mặc dù hầu hết các bộ giải mã sẽ chấp nhận các giá trị này là JSON hợp lệ, một số có thể không, vì đặc tả này không rõ ràng về điểm này.
Để tóm tắt, luôn kiểm tra xem bộ giải mã JSON của bạn có thể xử lý đầu ra bạn tạo từ json_encode ().
Hàm liên quan tới xử lý JSON trong php
- json_last_error() – Xác định lỗi khi sử dụng json_encode hay json_decode.
- JsonSerializable
- json_decode() – Chuyển từ chuỗi JSON thành dạng string.
- serialize() – Tạo một đại diện có thể lưu trữ của một giá trị.
Thông tin thêm thêm về cách sử dụng json_encode
- Một Điều khá đáng lưu ý khi bạn đang truyền dữ liệu JSON cho chương trình javascript, hãy đảm bảo chương trình của bạn bắt đầu bằng:
<?php header('Content-Type: application/json'); ?>
- Bạn có chắc chắn muốn sử dụng JSON_NUMERIC_CHECK, thực sự chắc chắn?
Chỉ cần xem usecase này:
<?php // International phone number json_encode(array('phone_number' => '+33123456789'), JSON_NUMERIC_CHECK); ?>
kết quả:
{"phone_number":33123456789}
Có lẽ nó có ý nghĩa đối với PHP (như is_numeric (‘+ 33123456789’) trả về đúng), nhưng thực sự, đúc nó thành một int?
Vì vậy, hãy cẩn thận khi sử dụng JSON_NUMERIC_CHECK, nó có thể gây rối với dữ liệu của bạn!.
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_encode() 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