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
相关产品推荐
相关产品推荐

