Tìm Hiểu Về Json_encode Và Json_decode Trong PHP
Có thể bạn quan tâm
Người viết: Thuy Coi
Trong PHP người ta sử dụng hàm số để convert data thành định dạng JSON và để decode định dạng JSON. Bài viết hôm nay chúng ta sẽ cùng nhau tìm hiểu về json_encode và json_decode trong PHP nhé.
JSON là gì
Trước hết phải biết JSON là gì.
JSON là viết tắt của cụm từ “JavaScript Object Notation”, là cách thức để mô tả object trong xử lý của java script.
Package-lock.json và những điều có thể bạn chưa biết JSON Web Token: Vấn đề xác thực REST API với JWTjson_encode là gì?
Để conver giá trị chỉ định thành định dạng JSON, người ta sử dụng hàm số json_encode.
Cách viết
Hàm số json_encode được viết như sau:
123 | stringjson_encode(mixed$value[,int$options=0[,int$depth=512]]) |
Argument
- 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ề
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.
Cách sử dụng json_encode
Sử dụng hàm json_encode để convert giá trị string chỉ định thành định dạng JSON.
Sample program
Ví dụ 1 json_encode():
1234567 | <?php$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echojson_encode($arr);?> |
Kết quả output của ví dụ trên sẽ như sau:
123 | {"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:
12345678910111213141516171819202122232425262728 | <?php$a=array('<foo>',"'bar'",'"baz"','&blong&',"xc3xa9"); echo"Normal: ",json_encode($a)," ";echo"Tags: ",json_encode($a,JSON_HEX_TAG)," ";echo"Apos: ",json_encode($a,JSON_HEX_APOS)," ";echo"Quot: ",json_encode($a,JSON_HEX_QUOT)," ";echo"Amp: ",json_encode($a,JSON_HEX_AMP)," ";echo"Unicode: ",json_encode($a,JSON_UNESCAPED_UNICODE)," ";echo"All: ",json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP|JSON_UNESCAPED_UNICODE)," "; $b=array(); echo"Empty array output as array: ",json_encode($b)," ";echo"Empty array output as object: ",json_encode($b,JSON_FORCE_OBJECT)," "; $c=array(array(1,2,3)); echo"Non-associative array output as array: ",json_encode($c)," ";echo"Non-associative array output as object: ",json_encode($c,JSON_FORCE_OBJECT)," "; $d=array('foo'=>'bar','baz'=>'long'); echo"Associative array always output as object: ",json_encode($d)," ";echo"Associative array always output as object: ",json_encode($d,JSON_FORCE_OBJECT)," ";?> |
Kết quả output của ví dụ trên sẽ như sau:
123456789101112131415161718 | Normal:["<foo>","'bar'",""baz"","&blong&","u00e9"]Tags:["u003Cfoou003E","'bar'",""baz"","&blong&","u00e9"]Apos:["<foo>","u0027baru0027",""baz"","&blong&","u00e9"]Quot:["<foo>","'bar'","u0022bazu0022","&blong&","u00e9"]Amp:["<foo>","'bar'",""baz"","u0026blongu0026","u00e9"]Unicode:["<foo>","'bar'",""baz"","&blong&","e"]All:["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","e"] Empty arrayoutput asarray:[]Empty arrayoutput asobject:{} Non-associative arrayoutput asarray:[[1,2,3]]Non-associative arrayoutput asobject:{"0":{"0":1,"1":2,"2":3}} Associative arrayalways output asobject:{"foo":"bar","baz":"long"}Associative arrayalways output asobject:{"foo":"bar","baz":"long"} |
Ví dụ 3 JSON_NUMERIC_CHECK option:
12345678910111213141516 | <?phpecho"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ả output của ví dụ trên sẽ như sau:
12345678910111213141516171819202122 | Strings representing numbers automatically turned into numbersarray(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 numbersarray(2){[0]=>string(13)"+a33123456789"[1]=>string(4)"a123"}string(24)"["+a33123456789","a123"]" |
Ví dụ 4 về sequential and nonsequential sequences:
123456789101112131415161718192021222324 | <?phpecho"Sequential array".PHP_EOL;$sequential=array("foo","bar","baz","blong");var_dump($sequential,json_encode($sequential)); echoPHP_EOL."Non-sequential array".PHP_EOL;$nonsequential=array(1=>"foo",2=>"bar",3=>"baz",4=>"blong");var_dump($nonsequential,json_encode($nonsequential)); echoPHP_EOL."Sequential array with one key unset".PHP_EOL;unset($sequential[1]);var_dump($sequential,json_encode($sequential));?> |
Kết quả output của ví dụ trên sẽ như sau:
1234567891011121314151617181920212223242526272829303132333435363738 | Sequential arrayarray(4){[0]=>string(3)"foo"[1]=>string(3)"bar"[2]=>string(3)"baz"[3]=>string(5)"blong"}string(27)"["foo","bar","baz","blong"]" Non-sequential arrayarray(4){[1]=>string(3)"foo"[2]=>string(3)"bar"[3]=>string(3)"baz"[4]=>string(5)"blong"}string(43)"{"1":"foo","2":"bar","3":"baz","4":"blong"}" Sequential arraywith one key unsetarray(3){[0]=>string(3)"foo"[2]=>string(3)"baz"[3]=>string(5)"blong"}string(33)"{"0":"foo","2":"baz","3":"blong"}" |
Ví dụ 5 JSON_PRESERVE_ZERO_FRACTION option:
123456 | <?phpvar_dump(json_encode(12.0,JSON_PRESERVE_ZERO_FRACTION));var_dump(json_encode(12.0));?> |
Kết quả output của ví dụ trên sẽ như sau: