PHP中json_decode返回null且报Syntax error的解决求助
无法解析JSON:Syntax error问题排查与解决
问题说明
已尝试所有相关解决方案仍无法解决JSON解析问题。获取的响应内容带有额外前缀,调用json_last_error_msg()返回Syntax error。
原始获取的响应内容
string(22672) "{"status":true,"result":{"0":{"keyword":"BMW","avg_cpc":0.405132,"min_clicks":42847.5859375,"avg_budget":17358.92818603125},"1":{"keyword":"BMW livrable","avg_cpc":0,"min_clicks":0,"avg_budget":0},"2":{"keyword":"BMW disponible","avg_cpc":0.595299,"min_clicks":27.446643829345703,"avg_budget":16.338959624965668},"3":{"keyword":"bonne affaires BMW","avg_cpc":0,"min_clicks":0,"avg_budget":0},"4":{"keyword":"BMW en stock","avg_cpc":0.370574,"min_clicks":12.511731147766113,"avg_budget":4.63652225835228},"max_cpc":1.0131090475410072,"min_clicks":42887.54431247711}} "
直接响应的有效JSON内容
{"status":true,"result":{"0":{"keyword":"BMW","avg_cpc":0.407065,"min_clicks":42202.34765625,"avg_budget":17179.098648691408},"1":{"keyword":"BMW livrable","avg_cpc":0,"min_clicks":0,"avg_budget":0},"2":{"keyword":"BMW disponible","avg_cpc":0.598459,"min_clicks":27.12619400024414,"avg_budget":16.233914935192107},"3":{"keyword":"bonne affaires BMW","avg_cpc":0,"min_clicks":0,"avg_budget":0},"4":{"keyword":"BMW en stock","avg_cpc":0.367595,"min_clicks":11.617576599121094,"avg_budget":4.270563069953918},"max_cpc":1.0179426327372374,"min_clicks":42241.091426849365}}
解决方案
1. 核心问题定位
原始响应包含PHP调试输出的前缀string(22672) "和末尾的 "(引号+空格),这些非JSON规范内容是导致解析报错的直接原因。
2. 代码处理方案
通过字符串提取清理无效内容,保留纯JSON部分:
$rawResponse = 'string(22672) "{"status":true,"result":{"0":{"keyword":"BMW","avg_cpc":0.405132,"min_clicks":42847.5859375,"avg_budget":17358.92818603125},"1":{"keyword":"BMW livrable","avg_cpc":0,"min_clicks":0,"avg_budget":0},"2":{"keyword":"BMW disponible","avg_cpc":0.595299,"min_clicks":27.446643829345703,"avg_budget":16.338959624965668},"3":{"keyword":"bonne affaires BMW","avg_cpc":0,"min_clicks":0,"avg_budget":0},"4":{"keyword":"BMW en stock","avg_cpc":0.370574,"min_clicks":12.511731147766113,"avg_budget":4.63652225835228},"max_cpc":1.0131090475410072,"min_clicks":42887.54431247711}} "'; // 提取引号包裹的JSON内容 $start = strpos($rawResponse, '"') + 1; $end = strrpos($rawResponse, '"'); $validJson = substr($rawResponse, $start, $end - $start); // 去除末尾多余空格 $validJson = trim($validJson); // 解析验证 $data = json_decode($validJson, true); if (json_last_error() === JSON_ERROR_NONE) { // 解析成功,执行业务逻辑处理 var_dump($data); } else { echo json_last_error_msg(); }
3. 额外验证
处理后的JSON可通过json_decode()或在线JSON校验工具确认语法正确性,确保无隐藏字符或编码异常问题。
内容的提问来源于stack exchange,提问作者VinoCoder
相关产品推荐
相关产品推荐

