Hàm json_last_error trong PHP dùng để làm gì?

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

Định Nghĩa.

Hàm json_last_error – Trả về lỗi cuối cùng xảy ra khi sử dụng json_encode() hay sử dụng json_decode().

Cú pháp.

Cú pháp:

json_last_error ( void ) : int

– Trả về lỗi cuối cùng (nếu có) xảy ra trong quá trình mã hóa / giải mã JSON cuối cùng, không chỉ định JSON_THlaw_ON_ERROR.

Giá trị trả về.

– Trả về một số nguyên, giá trị có thể là một trong các hằng số sau:

  • JSON_ERROR_NONE Không có lỗi xảy ra
  • JSON_ERROR_DEPTH Đã vượt quá độ sâu ngăn xếp tối đa
  • JSON_ERROR_STATE_MISMATCH JSON không hợp lệ hoặc không đúng định dạng
  • JSON_ERROR_CTRL_CHAR Lỗi ký tự điều khiển, có thể được mã hóa không chính xác
  • JSON_ERROR_SYNTAX Lỗi cú pháp
  • JSON_ERROR_UTF8 Các ký tự UTF-8 không đúng định dạng, có thể được mã hóa không chính xác PHP 5.3.3
  • JSON_ERROR_RECURSION Một hoặc nhiều tham chiếu đệ quy trong giá trị được mã hóa PHP 5.5.0
  • JSON_ERROR_INF_OR_NAN Một hoặc nhiều giá trị NAN hoặc INF trong giá trị được mã hóa PHP 5.5.0
  • JSON_ERROR_UNSUPPORTED_TYPE Giá trị của loại không thể mã hóa được đưa ra cho PHP 5.5.0
  • JSON_ERROR_INVALID_PROPERTY_NAME Một tên thuộc tính không thể mã hóa được đưa ra PHP 7.0.0
  • JSON_ERROR_UTF16 Các ký tự UTF-16 không đúng định dạng, có thể được mã hóa không chính xác PHP 7.0.0

Ví dụ.

Ví dụ 1 dùng hàm json_last_error() bình thương.

code:

<?php
// Một chuỗi json hợp lệ.
$json[] = '{"Organization": "PHP Documentation Team"}';

// Chuỗi json không hợp lệ sẽ gây ra cú pháp
// lỗi, trong trường hợp này chúng tôi đã sử dụng 'instead of' để báo lỗi
$json[] = "{'Organization': 'PHP Documentation Team'}";


foreach ($json as $string) {
    echo 'Decoding: ' . $string;
    json_decode($string);

    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            echo ' - Unknown error';
        break;
    }

    echo PHP_EOL;
}
?>

Kết quả:

Decoding: {"Organization": "PHP Documentation Team"} - No errors
Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON

Ví dụ 2 sử dụng json_last_error () với json_encode ()

code:

<?php
// Một chuỗi UTF-8 không hợp lệ.
$text = "\xB1\x31";

$json  = json_encode($text);
$error = json_last_error();

var_dump($json, $error === JSON_ERROR_UTF8);
?>

Kết quả:

string(4) "null"
bool(true)

Ví dụ 3 json_last_error () và JSON_THlaw_ON_ERROR

code:

<?php
// Chuỗi UTF8 không hợp lệ gây ra JSON_ERROR_UTF8
json_encode("\xB1\x31");

// Những điều sau đây không gây ra lỗi JSON
json_encode('okay', JSON_THROW_ON_ERROR);

// Trạng thái lỗi global không bị thay đổi bởi json_encode () trước đây
var_dump(json_last_error() === JSON_ERROR_UTF8);
?>

Kết quả:

bool(true)

Hàm liên quan

  • json_last_error_msg() – Trả về chuỗi lỗi của lệnh gọi json_encode () hoặc json_decode () cuối cùng
  • json_decode() – Giải mã chuỗi JSON
  • json_encode() – Chuyển một giá trị của biến về dạng JSON.

Thông tin thêm.

  • Mặc dù điều này rõ ràng có thể thay đổi giữa các phiên bản, các mã lỗi hiện tại như sau:

    0 = JSON_ERROR_NONE
    1 = JSON_ERROR_DEPTH
    2 = JSON_ERROR_STATE_MISMATCH
    3 = JSON_ERROR_CTRL_CHAR
    4 = JSON_ERROR_SYNTAX
    5 = JSON_ERROR_UTF8

    Đây là một ý của tôi để có thể nói cho các lập trình viên hiểu tại sao các tệp JSON cụ thể không được giải mã. Vui lòng không mã hóa những con số này thành thói quen xử lý lỗi.

  • Tôi đã sử dụng tập lệnh đơn giản này, lướt qua StackOverflow để thoát khỏi chức năng thất bại:

    <?php
        function utf8ize($d) {
            if (is_array($d)) {
                foreach ($d as $k => $v) {
                    $d[$k] = utf8ize($v);
                }
            } else if (is_string ($d)) {
                return utf8_encode($d);
            }
            return $d;
        }
    ?>

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_last_error() 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