Hàm json_encode() trong PHP dùng để làm gì?

29/06/2020 - lượt xem
Chia sẻ
 
Rate this post

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_QUOTJSON_HEX_TAGJSON_HEX_AMPJSON_HEX_APOSJSON_NUMERIC_CHECKJSON_PRETTY_PRINTJSON_UNESCAPED_SLASHESJSON_FORCE_OBJECTJSON_PRESERVE_ZERO_FRACTIONJSON_UNESCAPED_UNICODEJSON_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, and JSON_INVALID_UTF8_SUBSTITUTE đã được thêm vào.
  • 7.1.0JSON_UNESCAPED_LINE_TERMINATORSoptions 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.0JSON_PRESERVE_ZERO_FRACTIONoptions 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_PRINTJSON_UNESCAPED_SLASHES, and JSON_UNESCAPED_UNICODE được thêm vào.
  • 5.3.0 options JSON_NUMERIC_CHECKđã được sử dụng.
  • 5.3.0 options JSON_FORCE_OBJECTJSON_HEX_AMPJSON_HEX_APOSJSON_HEX_QUOT, and JSON_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

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

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm