贝利信息

php怎样处理json数据_php处理json数据编解码法【操作】

日期:2026-01-17 00:00 / 作者:星夢妙者
json_encode()返回null表示编码失败,常见原因包括资源类型、循环引用或非UTF-8编码;应配合json_last_error_msg()排查,并预处理数据。

json_encode() 编码失败返回 null 怎么办

PHP 中 json_encode() 返回 null 不代表“没结果”,而是明确表示编码失败。最常见原因是传入了无法序列化的数据类型,比如资源句柄(resource)、闭包(Closure)、或包含循环引用的数组/对象。

json_decode() 解析后是 object 还是 array

json_decode() 默认返回 stdClass 对象,不是关联数组。这点容易在遍历时出错——比如用 foreach ($data as $k => $v) 时,若误以为是数组却拿到对象,会触发 “Cannot use object as array” 错误。

PHP 7.3+ 的 JSON_THROW_ON_ERROR 选项怎么用

老版本 PHP 需要手动调用 json_last_error() 判断,代码冗长。PHP 7.3 起支持 JSON_THROW_ON_ERROR 标志,让 json_encode()json_decode() 在失败时直接抛出 JsonException 异常。

try {
    $arr = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    error_log('JSON 解析失败: ' . $e->getMessage());
    $arr = [];
}

处理大 JSON 文件时内存爆掉怎么办

file_get_contents() + json_decode() 一次性加载整个文件,遇到几十 MB 的 JSON 就容易 OOM。这不是 JSON 函数的问题,而是加载方式不合理。

实际项目里最容易被忽略的是字符编码和错误处理的组合:一个 GBK 编码的字符串进 json_encode(),既不报错也不警告,只默默返回 null;而开发者往往只检查空值,没查 json_last_error_msg(),最终卡在“为什么 JSON 没生成出来”。