如何在PHP中解析cURL返回的JSON并提取指定字段?
PHP cURL调用API提取JSON中responses字段的解决方案
我在PHP中使用cURL调用API时,需要从返回的JSON数据里提取responses字段的值,但每次只能获取完整的JSON数组。以下是我最初的API调用代码:
<?php $url = 'https://devman.kuki.ai/atalk'; $curl = curl_init(); $fields = array( 'botkey' => '41c131bcce47671608b684cae353c7c53c6ad32dea6f92d58c316c9a0a5635d4', 'input' => 'WHat is your name?' ); $fields_string = http_build_query($fields); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string); $data = curl_exec($curl); curl_close($curl); ?>
解决方法
原代码的问题在于未设置CURLOPT_RETURNTRANSFER选项——默认情况下curl_exec()会直接输出响应内容,而非将其作为字符串返回,导致无法后续解析JSON。添加关键配置并调整代码后,即可提取目标字段:
修改后的完整代码:
<?php $url = 'https://devman.kuki.ai/atalk'; $curl = curl_init(); $fields = array( 'botkey' => '41c131bcce47671608b684cae353c7c53c6ad32dea6f92d58c316c9a0a5635d4', 'input' => 'WHat is your name?' ); $fields_string = http_build_query($fields); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string); // 开启该选项,让curl_exec返回响应字符串而非直接输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($curl); // 将JSON字符串解析为关联数组 $jsn = json_decode($data, 1); // 提取responses数组的第一个元素 echo "Response= " . $jsn['responses'][0] . "\n\n"; // 打印解析后的完整数组 var_export($jsn); echo "\n\n"; // 打印原始JSON字符串 echo $data; curl_close($curl); ?>
运行输出
执行上述代码后,会得到如下输出:
Response= My name is Kuki. array ( 'status' => 'ok', 'responses' => array ( 0 => 'My name is Kuki.', ), 'sessionid' => 3771193866, 'channel' => 56, 'client_name' => 'uuiprod-kdp5f6bce4a8268a350-user-0311', ) { "status": "ok", "responses": ["My name is Kuki."], "sessionid": 3771193866 , "channel": 56 , "client_name": "uuiprod-kdp5f6bce4a8268a350-user-0311"}
内容的提问来源于stack exchange,提问作者Jake StBu
相关产品推荐
相关产品推荐

