如何从PHP cURL请求返回结果中提取指定字段值?
解决PHP cURL返回JSON后无法取值的问题
哦,这个问题我之前也碰到过!原因很简单——你用curl_exec拿到的$resp其实是一串JSON格式的字符串,不是PHP能直接操作的数组或对象。当你直接用$resp["new-files"][0]["item"]去访问时,PHP会把它当成字符串的字符索引来处理,自然就只输出了JSON字符串的第一个字符{。
解决这个问题只需要把JSON字符串转换成PHP能识别的数组或对象就行,给你两种常用的方案:
方案1:转成关联数组访问
使用json_decode($resp, true)将JSON字符串转为关联数组,之后就可以用数组索引正常取值了:
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://api.envato.com/v1/market/new-files:themeforest,site-templates.json', CURLOPT_HTTPHEADER => array('Authorization: Bearer myuniquekeygoeshere') )); $resp = curl_exec($curl); curl_close($curl); // 将JSON字符串转为关联数组,第二个参数true是关键 $respArray = json_decode($resp, true); // 现在可以正常获取目标值了 echo $respArray["new-files"][0]["item"];
方案2:转成对象访问
如果习惯用对象属性的方式访问,可以去掉json_decode的第二个参数,直接转成对象,注意带连字符的键名需要用{"键名"}的形式访问:
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://api.envato.com/v1/market/new-files:themeforest,site-templates.json', CURLOPT_HTTPHEADER => array('Authorization: Bearer myuniquekeygoeshere') )); $resp = curl_exec($curl); curl_close($curl); // 将JSON字符串转为对象 $respObj = json_decode($resp); // 访问带连字符的属性需要用花括号包裹键名 echo $respObj->{"new-files"}[0]->item;
额外建议:添加JSON解析错误处理
为了避免API返回异常导致JSON解析失败,建议加上错误检查:
$respArray = json_decode($resp, true); if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON解析出错:" . json_last_error_msg(); } else { echo $respArray["new-files"][0]["item"]; }
内容的提问来源于stack exchange,提问作者Deminer84
相关产品推荐
相关产品推荐

