PHP – JSON



PHP 的標準發行版預設啟用了 JSON 支援。PHP 擴充套件實現了 JavaScript 物件表示法 (JSON) 資料交換格式。PHP 解析器中的 JSON 擴充套件處理 JSON 資料。

JSON(JavaScript 物件表示法)是一種輕量級、基於文字、與語言無關的資料交換格式。JSON 定義了一小組用於結構化資料的可移植表示的格式化規則。它是一種基於文字的資料格式,易於人類和機器讀取。

PHP 5.2 及更高版本中的 JSON 擴充套件提供了一些預定義的常量、與 JSON 相關的函式,以及一個 JsonException 類。

PHP JSON 函式

PHP 具有以下 JSON 函式 -

json_encode()

此函式返回一個包含提供的值的 JSON 表示形式的字串。如果引數是陣列或物件,它將被遞迴序列化。

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

json_decode()

此函式獲取一個 JSON 編碼的字串並將其轉換為 PHP 值。

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

當此函式的關聯引數為 true 時,JSON 物件將作為關聯陣列返回;當為 false 時,JSON 物件將作為物件返回。

編碼/解碼操作受提供的標誌影響。預定義的常量及其整數值如下所示 -

預定義常量
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()

此函式返回上次 json_encode() 或 json_decode() 呼叫的錯誤字串。

json_last_error_msg(): string

如果未發生錯誤,則返回“無錯誤”訊息。

json_last_error()

此函式返回一個整數。

json_last_error(): int

該函式返回一個與以下常量之一對應的整數 -

序號 常量和含義
1

JSON_ERROR_NONE

未發生錯誤

2

JSON_ERROR_DEPTH

已超出最大堆疊深度

3

JSON_ERROR_STATE_MISMATCH

無效或格式錯誤的 JSON

4

JSON_ERROR_CTRL_CHAR

控制字元錯誤,可能是編碼錯誤

5

JSON_ERROR_SYNTAX

語法錯誤

6

JSON_ERROR_UTF8

格式錯誤的 UTF-8 字元,可能是編碼錯誤

7

JSON_ERROR_RECURSION

要編碼的值中存在一個或多個遞迴引用

8

JSON_ERROR_INF_OR_NAN

要編碼的值中存在一個或多個NANINF

9 JSON_ERROR_UNSUPPORTED_TYPE

給定了一個無法編碼的型別的值

10

JSON_ERROR_INVALID_PROPERTY_NAME

給定了一個無法編碼的屬性名稱

11

JSON_ERROR_UTF16

格式錯誤的 UTF-16 字元,可能是編碼錯誤

示例

以下 PHP 程式碼將給定陣列編碼為 JSON 表示形式,並將 JSON 字串解碼回 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);
?>

它將產生以下輸出 -

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)
}
廣告