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 编码的字符串并将其转换为 PHP 值。
json_decode(
string $json,
?bool $associative = null,
int $depth = 512,
int $flags = 0
): mixed
当该函数的 associative 参数为 true 时,JSON 对象将作为 associative 数组返回。当 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
如果未发生错误,则返回 “No error” 消息。
json_last_error()
此函数返回一个整数。
json_last_error(): int
该函数返回与以下常量之一对应的整数 -
常量 | 描述 |
---|---|
JSON_ERROR_NONE | 未发生错误 |
JSON_ERROR_DEPTH | 已超过最大堆栈深度 |
JSON_ERROR_STATE_MISMATCH | JSON 无效或格式错误 |
JSON_ERROR_CTRL_CHAR | 控制字符错误,可能编码错误 |
JSON_ERROR_SYNTAX | 语法错误 |
JSON_ERROR_UTF8 | UTF-8 字符格式错误,可能编码错误 |
JSON_ERROR_RECURSION | 要编码的值中的一个或多个递归引用 |
JSON_ERROR_INF_OR_NAN | 要编码的值中的一个或多个 NAN 或 INF 值 |
JSON_ERROR_UNSUPPORTED_TYPE | 给定无法编码的类型的值 |
JSON_ERROR_INVALID_PROPERTY_NAME | 给出无法编码的属性名称 |
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 "初始数组: " . PHP_EOL;
var_dump($arr);
echo "编码JSON: $encoded" . PHP_EOL;
$decoded = json_decode($encoded);
echo "解码后得到的数组: " . PHP_EOL;
var_dump($decoded);
?>
它将产生以下输出 -
初始数组:
array(5) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
["d"]=>
int(4)
["e"]=>
int(5)
}
编码JSON: {"a":1,"b":2,"c":3,"d":4,"e":5}
解码后得到的数组:
object(stdClass)#1 (5) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
["d"]=>
int(4)
["e"]=>
int(5)
}