0

0

使用 PHP cURL 从 API 获取并解析多层级 JSON 数据

花韻仙語

花韻仙語

发布时间:2025-09-17 11:06:26

|

207人浏览过

|

来源于php中文网

原创

使用 php curl 从 api 获取并解析多层级 json 数据

本文详细讲解如何使用 PHP cURL 发送 API 请求,接收 JSON 响应,并通过 json_decode 解析数据。重点演示了如何遍历多层级数组,精确提取如歌曲标题和艺术家姓名等嵌套字段,提供完整的代码示例和实践指导,帮助开发者高效处理复杂的 API 返回数据。

1. 使用 cURL 发送 API 请求

cURL 是一个强大的命令行工具和库,用于通过各种协议传输数据。在 PHP 中,我们可以使用 cURL 扩展来发起 HTTP 请求,例如从 RESTful API 获取数据。

首先,我们需要初始化 cURL 会话,设置请求的 URL,并指定将响应作为字符串返回而不是直接输出。

在上述代码中,CURLOPT_RETURNTRANSFER 设置为 true 是关键,它确保 curl_exec() 返回的是响应内容本身,而不是在屏幕上打印。

2. 解析 JSON 响应

大多数现代 API 都以 JSON (JavaScript Object Notation) 格式返回数据。在 PHP 中,json_decode() 函数用于将 JSON 字符串转换为 PHP 变量。为了方便后续的数据访问,通常会将 JSON 解码为关联数组。

立即学习PHP免费学习笔记(深入)”;

json_decode($resp, true) 中的 true 参数指示函数返回关联数组,而不是对象。这使得通过字符串键访问数据变得更加直观和方便。

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

下载

3. 遍历并提取多层级数据

API 返回的 JSON 数据通常是嵌套的,意味着一个数组或对象中包含其他数组或对象。根据提供的示例数据结构,主要的记录列表存储在 $decoded['data'] 键下,每个记录本身又是一个包含 title 和 artist 等字段的数组,其中 artist 字段又是一个包含 name 等信息的嵌套数组。

要从所有记录中提取特定的值(例如歌曲标题和艺术家姓名),我们需要遍历 $decoded['data'] 数组,并在每次迭代中深入访问嵌套的键。

在 foreach ($decoded['data'] as $record) 循环中,每次迭代 $record 变量都会持有当前处理的歌曲记录的完整数组。然后,我们可以通过 $record['title'] 直接访问标题,并通过 $record['artist']['name'] 访问嵌套在 artist 数组中的艺术家姓名。使用 isset() 进行检查是一种良好的编程习惯,可以避免在某些键不存在时产生 PHP 警告或错误。

4. 完整代码示例

将上述所有步骤整合起来,形成一个完整的 PHP 脚本,用于从 Deezer API 获取搜索结果并打印歌曲标题和艺术家姓名:

 $record) {
                // 9. 提取歌曲标题和艺术家姓名
                $title = isset($record['title']) ? $record['title'] : '未知标题';
                $artistName = isset($record['artist']['name']) ? $record['artist']['name'] : '未知艺术家';

                // 10. 输出提取到的信息
                printf("记录 %d:\n", $index + 1);
                printf("  歌曲标题: %s\n", $title);
                printf("  艺术家: %s\n\n", $artistName);
            }
            echo "-----------------\n";
        } else {
            echo "API 响应中未找到 'data' 数组或其格式不正确。\n";
        }
    }
}

// 11. 关闭 cURL 会话
curl_close($ch);
?>

5. 注意事项与最佳实践

  • 错误处理: 始终检查 curl_error() 和 json_last_error() 以捕获请求和解析过程中可能出现的错误。这对于调试和构建健壮的应用程序至关重要。
  • 数据存在性检查: 在访问数组键之前,使用 isset() 检查键是否存在,尤其是在处理来自外部源(如 API)的数据时。这可以防止在数据结构不完全符合预期时产生 PHP 警告或错误。
  • API 速率限制: 如果频繁请求 API,请注意 API 提供商的速率限制策略,避免因请求过多而被暂时或永久封禁。
  • 安全: 如果您将从 API 获取的数据显示在网页上,请务必进行适当的输出转义(例如使用 htmlspecialchars()),以防止跨站脚本 (XSS) 攻击。
  • 可读性: 对于复杂的嵌套数据,考虑使用辅助函数或类来封装数据访问逻辑,提高代码的可读性和维护性。

通过遵循这些步骤和最佳实践,您可以有效地使用 PHP cURL 从各种 API 获取和解析多层级 JSON 数据,并准确提取所需的信息。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2650

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1657

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1515

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1418

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1468

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 8万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号