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

网站JSON数据存TXT后转数组失败,json_decode返回空的解决方法

解决json_decode返回空的问题

别着急,咱们一步步排查和解决这个问题:

第一步:先拿到具体的解析错误信息

PHP的json_decode失败时不会主动抛出错误,但可以通过两个函数获取到底哪里出了问题,这是最关键的第一步。先写一段测试代码:

// 读取txt文件内容
$jsonContent = file_get_contents('你的文件名称.txt');
// 尝试解析为数组(第二个参数传true返回数组,否则是对象)
$targetArray = json_decode($jsonContent, true);
// 检查解析状态
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "解析出错:" . json_last_error_msg();
}

运行这段代码,就能明确知道是格式错误、编码问题还是其他原因导致的解析失败。

第二步:针对常见问题的解决办法

1. JSON格式不合法

这是最常见的原因,比如:

  • 字符串用了单引号(JSON规范要求必须用双引号)
  • 数组/对象最后一个元素后面多了逗号
  • 存在未转义的特殊字符(比如换行、双引号)

解决办法:

  • 把txt里的内容复制到JSON校验工具(随便搜一个在线的就行)里检查,修复格式问题;
  • 检查你用来保存数据的代码,确保没有额外修改原始JSON内容——比如如果是直接用file_put_contents保存从网站获取的响应,那基本没问题,但如果中间做了字符串替换、拼接操作,很可能破坏了格式。

2. 文件带有UTF-8 BOM头

有些编辑器保存UTF-8文件时会自动加上BOM头(三个不可见的特殊字符),这会让JSON开头多出无效内容,导致解析失败。

解决办法:

  • 用Notepad++打开txt文件,点击「编码」→「转为UTF-8无BOM编码」,再保存;
  • 或者在PHP读取时手动去掉BOM头:
$jsonContent = file_get_contents('你的文件名称.txt');
// 移除UTF-8 BOM头
$jsonContent = preg_replace('/^\x{EF}\x{BB}\x{BF}/u', '', $jsonContent);
$targetArray = json_decode($jsonContent, true);

3. 文件编码与JSON要求不符

JSON规范要求用UTF-8编码,如果你的txt文件是GBK等其他编码,也会解析失败。

解决办法:

  • 在PHP里转换编码后再解析:
$jsonContent = file_get_contents('你的文件名称.txt');
// 从GBK转成UTF-8,根据实际编码调整第二个参数
$jsonContent = mb_convert_encoding($jsonContent, 'UTF-8', 'GBK');
$targetArray = json_decode($jsonContent, true);

4. JSON内容过大导致内存不足

如果你的JSON文件特别大,默认的PHP内存限制可能不够支撑解析。

解决办法:

  • 临时调整PHP内存限制:
ini_set('memory_limit', '256M'); // 按需调整大小,比如512M
$jsonContent = file_get_contents('你的文件名称.txt');
$targetArray = json_decode($jsonContent, true);

最后验证

修复后再用第一步的测试代码检查,只要json_last_error()返回JSON_ERROR_NONE,那$targetArray就是你想要的数组了。

内容的提问来源于stack exchange,提问作者H.Marcus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:59