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

PHP解析Python返回的JSON报illegal string offset错误如何解决?

问题根源
  • 第一,Python输出的不是标准JSON格式:Python直接print字典对象,输出的是Python语法的字符串,用单引号包裹键名,不符合JSON要求双引号的规范,PHP的json_decode无法正确解析。
  • 第二,PHP端解析逻辑错误:你拿到的shell_exec返回值本身就是Python输出的字符串,你反而先执行json_encode把字符串转成JSON字符串,再json_decode,最终得到的还是原始字符串,不是数组,所以访问关联键才会报illegal string offset错误,用数字下标访问其实是在取字符串的单个字符,所以输出{'to。
修复步骤

1. 修改Python代码,输出标准JSON

不要直接打印字典对象,引入json模块把字典转成标准JSON字符串再输出:

import json
# 原有业务代码保持不变
ParseData = {}
ParseData['total'] = totalProduksi
ParseData['produksiHarian'] = fittedData
ParseData['r_squared'] = r_square
ParseData['variabel'] = variabel
# 输出标准JSON格式
print(json.dumps(ParseData))

2. 修改PHP端解析逻辑,删除多余的json_encode

拿到Python返回的结果后直接解析即可,同时可以加解析错误校验:

$result = shell_exec('C:\xampp\htdocs\prosold\python\venv\Scripts\python.exe C:/xampp/htdocs/prosold/python/main.py ' . escapeshellarg(json_encode($testday)));
// 直接解析JSON字符串,第二个参数true表示返回关联数组
$dataParse = json_decode($result, true);
// 校验解析结果
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析错误:" . json_last_error_msg());
}
// 现在可以正常访问对应字段
echo $dataParse['total'];

内容的提问来源于stack exchange,提问作者Fahmi Sabila Dinnulhaq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:03