跳到主要内容

JSON 包装器

概述​

Flight 中的 Json 类提供了一种简单、一致的方式来在应用中编码和解码 JSON 数据。它对 PHP 原生的 JSON 函数进行了包装,提供更好的错误处理和一些有用的默认设置,使处理 JSON 更简单、更安全。

理解​

在现代 PHP 应用中,处理 JSON 非常常见,特别是在构建 API 或处理 AJAX 请求时。Json 类集中了所有的 JSON 编码和解码操作,这样你就不必担心 PHP 内置函数的奇怪边界情况或晦涩的错误信息。

主要特性:

  • 一致的错误处理(失败时抛出异常)
  • 编码/解码的默认选项(如反斜杠不转义)
  • 美化输出和验证的工具方法

基本用法​

将数据编码为 JSON​

要将 PHP 数据转换为 JSON 字符串,使用 Json::encode():

use flight\util\Json;

$data = [
'framework' => 'Flight',
'version' => 3,
'features' => ['routing', 'views', 'extending']
];

$json = Json::encode($data);
echo $json;
// 输出: {"framework":"Flight","version":3,"features":["routing","views","extending"]}

如果编码失败,你将获得一个带有有用错误消息的异常。

美化输出​

想要 JSON 易于阅读?使用 prettyPrint():

echo Json::prettyPrint($data);
/*
{
"framework": "Flight",
"version": 3,
"features": [
"routing",
"views",
"extending"
]
}
*/

解码 JSON 字符串​

要将 JSON 字符串转换回 PHP 数据,使用 Json::decode():

$json = '{"framework":"Flight","version":3}';
$data = Json::decode($json);
echo $data->framework; // 输出: Flight

如果你想要关联数组而不是对象,将 true 作为第二个参数传入:

$data = Json::decode($json, true);
echo $data['framework']; // 输出: Flight

如果解码失败,你将获得一个带有清晰错误消息的异常。

验证 JSON​

检查一个字符串是否为有效的 JSON:

if (Json::isValid($json)) {
// 有效!
} else {
// 不是有效的 JSON
}

获取最后的错误​

如果你想查看最后的 JSON 错误消息(来自原生 PHP 函数):

$error = Json::getLastError();
if ($error !== '') {
echo "Last JSON error: $error";
}

高级用法​

如果需要更多控制,你可以自定义编码和解码选项(参见 PHP 的 json_encode 选项):

// 使用 HEX_TAG 选项编码
$json = Json::encode($data, JSON_HEX_TAG);

// 使用自定义深度解码
$data = Json::decode($json, false, 1024);

参见​

  • 集合 - 处理可轻松转换为 JSON 的结构化数据。
  • 配置 - 如何配置你的 Flight 应用。
  • 扩展 - 如何添加自己的工具或覆盖核心类。

故障排除​

  • 如果编码或解码失败,将抛出异常——如果想优雅地处理错误,请用 try/catch 包裹调用。
  • 如果得到意外结果,请检查数据中是否有循环引用或非 UTF-8 字符。
  • 在解码之前使用 Json::isValid() 检查字符串是否为有效的 JSON。

更新日志​

  • v3.16.0 - 添加了 JSON 包装器工具类。