PHP - JavaScript 对象表示法(JSON)函数


JSON 预定义常量

以下常量由此扩展定义,并且仅当扩展已编译为 PHP 或在运行时动态加载时可用。

以下常量指示 json_last_error() 函数返回错误类型。

错误类型 描述
JSON_ERROR_NONE (integer) 未发生错误。
JSON_ERROR_DEPTH (integer) 已超过最大堆栈深度
JSON_ERROR_STATE_MISMATCH (integer) 在下溢或模式不匹配时发生
JSON_ERROR_CTRL_CHAR (integer) 控制字符错误,可能编码错误
JSON_ERROR_SYNTAX (integer) 语法错误
JSON_ERROR_UTF8 (integer) 格式错误的 UTF-8 字符,可能编码错误
JSON_ERROR_RECURSION (integer) 传递给 json_encode() 的对象或数组包含递归引用,不能进行编码。如果给出了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则 NULL 将在递归引用的位置进行编码
JSON_ERROR_INF_OR_NAN (integer) 传递给 json_encode() 的值包括 NAN 或 INF。如果给出了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则 0 将被编码以代替这些特殊数字
JSON_ERROR_UNSUPPORTED_TYPE (integer) 已将不受支持的类型的值提供给 json_encode(),例如资源。如果给出了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则 NULL 将被编码以代替 unsupported 的值
JSON_ERROR_INVALID_PROPERTY_NAME (integer) 将 JSON 对象解码为 PHP 对象时,传递给 json_decode() 的字符串中包含以 \u0000 字符开头的键
JSON_ERROR_UTF16 (integer) 传递给 json_encode() 的 JSON 字符串中包含的 Unicode 转义中的单个不成对 UTF-16 代理项

以下常量可以组合起来形成 json_decode() 函数的选项。

常量 描述
JSON_BIGINT_AS_STRING (integer) 将大整数解码为其原始字符串值
JSON_OBJECT_AS_ARRAY (integer) 将 JSON 对象解码为 PHP 数组。可以通过调用 json_decode() 且第二个参数等于 TRUE 来自动添加此选项

以下常量可以组合成 json_encode() 的选项。

常量 描述
JSON_HEX_TAG (integer) 所有 < 和 > 都转换为 \u003C 和 \u003E
JSON_HEX_AMP (integer) 所有 &s 都转换为 \u0026
JSON_HEX_APOS (integer) 所有 ' 都转换为 \u0027
JSON_HEX_QUOT (integer) 所有 “ 都转换为 \u0022
JSON_FORCE_OBJECT (integer) 使用非关联数组时,输出对象而不是数组。当输出的接收者需要对象且数组为空时,尤其有用
JSON_NUMERIC_CHECK (integer) 将数字字符串编码为数字
JSON_PRETTY_PRINT (integer) 在返回的数据中使用空格来格式化数据
JSON_UNESCAPED_SLASHES (integer) 不要转义 /
JSON_UNESCAPED_UNICODE (integer)  按字面意思对多字节 Unicode 字符进行编码(默认转义为 \uXXXX)
JSON_PARTIAL_OUTPUT_ON_ERROR (integer) 替换一些不可编码的值,而不是失败
JSON_PRESERVE_ZERO_FRACTION (integer)  确保浮点值始终编码为浮点值
JSON_UNESCAPED_LINE_TERMINATORS (integer) 提供 JSON_UNESCAPED_UNICODE 时,行终止符保持未转义状态。它使用与 PHP 7.1 之前相同的行为,但没有这个常量

函数列表

函数 描述
json_decode() 解码 JSON 字符串。
json_encode() 返回值的 JSON 表示形式。
json_last_error() 返回上次发生的错误。
json_last_error_msg() 返回上次 json_encode() 或 json_decode() 调用的错误字符串。
sonserializable_interface() 实现 JsonSerializable 接口的 Object 可以在使用 json_encode() 函数编码时自定义其 JSON 表示形式。
JsonSerializable_jsonSerialize() 指定可以序列化为 JSON 的数据。