You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP json_decode处理无效JSON返回NULL问题及解决方案

解决json_decode返回NULL(实际为PHP序列化数据)的问题

嘿,这个问题我太熟了!你肯定是把PHP序列化数据当成JSON来解析了,这就难怪json_decode()会返回NULL啦~

问题根源

你提供的这段数据开头是a:14:{...},这是PHP序列化后的数组格式:

  • a代表这是一个数组(array)
  • 14是数组包含的元素数量
  • 后面的s:9:"rating_id"表示字符串类型(string)、长度为9的键名rating_id,对应的值也是字符串类型

而json_decode()只能解析JSON格式的字符串,完全识别不了PHP序列化的结构,所以自然返回NULL。

解决方案

1. 用正确的函数解析

PHP专门提供了unserialize()函数来处理这种序列化数据,直接用它就能得到原始的PHP数组:

// 你的序列化数据(注意要确保数据完整,你提供的末尾是截断的,完整数据才能正常解析)
$serializedStr = 'a:14:{s:9:"rating_id";s:24:"rwp_rating_5aafe3e80b03d";s:14:"rating_post_id";i:3293;s:16:"rating_review_id";s:32:"14855d71ef49debd6f9493c13b1bf84b";s:12:"rating_score";a:1:{i:0;d:5;}s:14:"rating_user_id";i:2;s:16:"rating_user_name";s:0:"";s:17:"rating_user_email";s:0:"";s:12:"rating_title";s:0:"";s:14:"rating_comment";s:11:"dsfusof9832";s:13:"rating_images";a:0:{}s:11:"rating_date";i:1521476584;s:...';

// 解析序列化数据
$parsedArray = unserialize($serializedStr);

// 检查解析结果
if ($parsedArray !== false) {
    print_r($parsedArray); // 直接输出解析后的数组结构
} else {
    echo "哎呀,数据可能被截断或者格式有问题,解析失败了!";
}

2. (可选)转成JSON格式

如果你的最终需求是得到JSON数据,那可以在解析后再用json_encode()转换:

$jsonData = json_encode($parsedArray);
echo $jsonData; // 输出标准JSON格式的字符串

重要提醒

  • 数据完整性:你提供的末尾是s:...,这明显是截断的序列化数据,完整的序列化字符串才能被unserialize()正确解析,所以要先确保数据源是完整的哦。
  • 安全风险:如果这段数据来自不可信的外部来源(比如用户提交、第三方接口),直接使用unserialize()存在安全隐患——恶意构造的序列化数据可能会执行恶意代码。这种情况下建议优先使用JSON格式传输数据,或者自己实现更安全的解析逻辑。

内容的提问来源于stack exchange,提问作者osakagreg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:25:10