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