PHP – JSON

Các bản phân phối chuẩn của PHP đã bật hỗ trợ JSON theo mặc định. Phần mở rộng PHP triển khai định dạng trao đổi dữ liệu JavaScript Object Notation (JSON). Phần mở rộng JSON trong trình phân tích PHP xử lý dữ liệu JSON.

JSON (JavaScript Object Notation) là một định dạng trao đổi dữ liệu nhẹ, dựa trên văn bản và độc lập với ngôn ngữ. JSON định nghĩa một tập hợp nhỏ các quy tắc định dạng cho việc đại diện dữ liệu có cấu trúc một cách di động. Đây là một định dạng dữ liệu dựa trên văn bản mà con người cũng như máy móc dễ dàng đọc hiểu.

Mở rộng JSON trong PHP phiên bản 5.2 trở đi cung cấp một số hằng số được định nghĩa trước, các hàm liên quan đến JSON, và cũng có một lớp JsonException.

PHP JSON Functions

PHP có các hàm JSON sau đây −

json_encode()

Hàm này trả về một chuỗi chứa đại diện JSON của giá trị được cung cấp. Nếu tham số là một mảng hoặc đối tượng, nó sẽ được tuần tự hóa một cách đệ quy.

json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false

json_decode()

Hàm này nhận một chuỗi được mã hóa JSON và chuyển đổi nó thành một giá trị PHP.

json_decode(
   string $json,
   ?bool $associative = null,
   int $depth = 512,
   int $flags = 0
): mixed

Khi tham số liên kết của hàm này là true, các đối tượng JSON sẽ được trả về dưới dạng mảng liên kết; khi false, các đối tượng JSON sẽ được trả về dưới dạng các đối tượng.

Các thao tác mã hóa/giải mã bị ảnh hưởng bởi các cờ được cung cấp. Các hằng số được định nghĩa trước và giá trị số nguyên của chúng như sau −

Predefined Constant Values
JSON_HEX_TAG 1
JSON_HEX_AMP 2
JSON_HEX_APOS 4
JSON_HEX_QUOT 8
JSON_FORCE_OBJECT 16
JSON_NUMERIC_CHECK 32
JSON_UNESCAPED_SLASHES 64
JSON_PRETTY_PRINT 128
JSON_UNESCAPED_UNICODE 256

json_last_error_msg()

Hàm này trả về chuỗi lỗi của lần gọi json_encode() hoặc json_decode() cuối cùng.

json_last_error_msg(): string

Thông điệp "Không có lỗi" sẽ được trả về nếu không có lỗi xảy ra.

json_last_error()

Hàm này trả về một số nguyên.

json_last_error(): int

Hàm trả về một số nguyên tương ứng với một trong các hằng số sau −

Sr.No Constant & Meaning
1 JSON_ERROR_NONE No error has occurred
2 JSON_ERROR_DEPTH The maximum stack depth has been exceeded
3 JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON
4 JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded
5 JSON_ERROR_SYNTAX Syntax error
6 JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded
7 JSON_ERROR_RECURSION One or more recursive references in the value to be encoded
8 JSON_ERROR_INF_OR_NAN One or more NAN or INF values in the value to be encoded
9 JSON_ERROR_UNSUPPORTED_TYPE A value of a type that cannot be encoded was given
10 JSON_ERROR_INVALID_PROPERTY_NAME A property name that cannot be encoded was given
11 JSON_ERROR_UTF16 Malformed UTF-16 characters, possibly incorrectly encoded

Example

Đoạn mã PHP sau đây mã hóa một mảng đã cho thành định dạng JSON và giải mã chuỗi JSON trở lại thành mảng PHP.

<?php
   $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   $encoded = json_encode($arr);
   echo "The initial array: " . PHP_EOL;
   var_dump($arr);
   echo "Encoded JSON: $encoded" . PHP_EOL;

   $decoded = json_decode($encoded);
   echo "Array obtained after decoding: " . PHP_EOL;
   var_dump($decoded);
?>

Nó sẽ tạo ra output

The initial array: 
array(5) {
   ["a"]=>
   int(1)
   ["b"]=>
   int(2)
   ["c"]=>
   int(3)
   ["d"]=>
   int(4)
   ["e"]=>
   int(5)
}
Encoded JSON: {"a":1,"b":2,"c":3,"d":4,"e":5}
Array obtained after decoding: 
object(stdClass)#1 (5) {
   ["a"]=>
   int(1)
   ["b"]=>
   int(2)
   ["c"]=>
   int(3)
   ["d"]=>
   int(4)
   ["e"]=>
   int(5)
}