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

PHP中json_decode解析Python脚本JSON返回null及后续报错问题

问题解决指南

1. 最初json_decode返回null的排查与修复

当json_decode($json)返回null时,90%的原因是$json的内容不是合法的JSON格式,你可以按以下步骤定位问题:

  • 先看原始输出:在json_decode前加一行var_dump($json); die;,看看拿到的是不是纯JSON——有没有多余的换行、Python警告、调试print语句输出?这些都会让JSON格式失效。
  • 捕获Python的错误信息:shell_exec默认只抓标准输出(stdout),把错误输出(stderr)重定向过来,就能看到Python脚本有没有报错:
    $json = shell_exec("C:/Users/1/AppData/Local/Programs/Python/Python36-32/python -W ignore ../../../interprises_parsers/parsers/tax/parser.py ".$bin." 2>&1");
    var_dump($json); // 这里就能看到Python的错误或警告了
    
  • 确保Python只输出JSON:检查你的Python脚本,删掉所有调试用的print(),确保最终只输出一段干净的JSON——比如用json.dump(data, sys.stdout)直接输出,或者print(json.dumps(data), end='')避免多余换行。

2. 更新后:返回对象时的响应错误

你遇到的The Response content must be a string or object implementing __toString(), "object" given.错误,是因为框架(看起来像Laravel)不支持直接返回原生stdClass对象。解决起来很简单:

  • 用框架的JSON响应方法包装对象返回:
    $json = shell_exec("C:/Users/1/AppData/Local/Programs/Python/Python36-32/python -W ignore ../../../interprises_parsers/parsers/tax/parser.py ".$bin);
    $output = json_decode($json);
    return response()->json($output); // 把对象转成合法的JSON响应
    

另外,从你提供的var_dump结果看,输出里同时有stdClass对象和重复的JSON字符串,这说明Python脚本大概率输出了两次JSON内容,或者控制器里有多余的echo/print操作。你需要:

  • 检查Python脚本,确保只调用一次输出JSON的代码;
  • 检查控制器,除了return语句外,有没有额外的输出代码。

内容的提问来源于stack exchange,提问作者A.Dias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:22