Php 简明教程

PHP – JSON

PHP 的标准发行版默认启用 JSON 支持。PHP 扩展实现 JavaScript 对象表示法 (JSON) 数据交换格式。PHP 解析器中的 JSON 扩展处理 JSON 数据。

JSON(JavaScript 对象表示法)是一种轻量级、基于文本、与语言无关的数据交换格式。JSON 为便携式表示结构化数据定义了一组较小的格式化规则。它是一种基于文本的数据格式,对于人类和机器来说都很容易读取。

PHP 版本 5.2 及更高版本中的 JSON 扩展提供了许多预定义的常量、JSON 相关函数以及 JsonException 类。

PHP JSON Functions

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 对象将作为对象返回。

编码/解码操作受所提供标志的影响。预定义常量及其整数值如下 −

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()

此函数返回最近 json_encode() 或 json_decode() 调用的错误字符串。

json_last_error_msg(): string

如果没有发生错误,则返回“No error”消息。

json_last_error()

此函数返回一个整数。

json_last_error(): int

该函数返回一个整数,对应于以下常量之一 −

Sr.No

Constant & Meaning

1

JSON_ERROR_NONE No error has occurred

2

JSON_ERROR_DEPTH 已超过最大栈深度

3

JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON

4

JSON_ERROR_CTRL_CHAR 控制字符错误,可能编码不正确

5

JSON_ERROR_SYNTAX Syntax error

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 个字符,可能编码不正确

Example

以下 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);
?>

它将生成以下 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)
}