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 编码的字符串并将其转换为 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)
}