PHP cURL获取与递归清理JSON数据教程

PHP cURL获取与递归清理JSON数据教程

本文详细介绍了如何使用PHP的cURL库从指定API获取JSON数据,并实现一个高效的递归函数来清洗数据。清洗规则包括移除值为’N/A’、’-‘或空字符串的键值对,以及数组中对应的元素,最终输出处理后的纯净JSON对象,为数据预处理提供实用指南。

在现代web开发中,从外部api获取数据并进行处理是常见的任务。然而,api返回的数据往往包含一些无效或不必要的值,例如“n/a”、“-”或空字符串。为了确保数据质量和后续处理的准确性,我们需要对这些数据进行清洗。本教程将指导您如何使用php的curl库获取json数据,并实现一个通用的递归函数来高效地清理这些数据。

1. 使用cURL获取JSON数据

PHP的cURL扩展是进行HTTP请求的强大工具。通过它,我们可以轻松地向指定的URL发送GET请求并获取响应内容。

首先,我们需要初始化cURL会话,设置请求URL,并配置相关选项。


代码解析:

curl_init($url): 初始化一个新的cURL会话,并指定请求的URL。curl_setopt($ch, CURLOPT_RETURNTRANSFER, true): 这一步至关重要,它确保curl_exec()函数返回API响应的字符串内容,而不是直接将其输出到浏览器或命令行。curl_setopt($ch, CURLOPT_HEADER, 0): 告诉cURL不要在输出中包含HTTP响应头。curl_exec($ch): 执行cURL请求。如果请求失败,它将返回false。curl_close($ch): 关闭cURL会话并释放资源。json_decode($data, true): 将获取到的JSON格式字符串转换为PHP的关联数组。如果$data不是有效的JSON,此函数将返回null。

2. 定义数据清洗规则

我们的目标是清理JSON对象中包含特定“无效”值的键值对。具体规则如下:

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

移除所有值为 N/A、- 或空字符串 ” 的键值对。如果这些无效值出现在数组中,则只移除数组中的该单个元素。

由于JSON数据可能包含嵌套的对象或数组,我们需要一个能够深入遍历数据结构的解决方案。

3. 实现递归清洗函数

为了处理嵌套的数据结构,最有效的方法是使用递归函数。该函数将检查当前元素是否为数组,如果是,则递归调用自身处理其子元素;如果不是,则根据清洗规则进行判断和移除。

 $val) {            // 检查当前值是否为需要移除的无效值            if ($val === 'N/A' || $val === '-' || $val === '') {                unset($data[$key]); // 移除该键值对            }            // 如果当前值是数组,则递归调用自身进行清洗            else if (is_array($val)) {                $data[$key] = clean_obj($val);                // 递归清洗后,如果子数组变为空,也可能需要移除该键                // 根据具体需求决定是否添加此逻辑                // if (empty($data[$key])) {                //     unset($data[$key]);                // }            }        }    }    return $data; // 返回清洗后的数据}// ... (cURL获取数据的代码,如上一节所示) ...// 假设 $newData 已经通过 json_decode($data, true) 获得// $newData = json_decode($data, true);// 调用清洗函数$cleaned_array = clean_obj($newData);// 输出清洗后的结果echo "清洗后的数据:n";echo "" . print_r($cleaned_array, 1) . "";?>

代码解析:

clean_obj($data): 函数接收一个数组作为参数。if (is_array($data)): 确保我们只对数组进行迭代操作。foreach ($data as $key => $val): 遍历数组中的每个键值对。if ($val === ‘N/A’ || $val === ‘-‘ || $val === ”): 严格比较当前值是否为预设的无效值。使用===可以避免类型转换问题。unset($data[$key]): 如果值匹配,则从数组中移除该键值对。else if (is_array($val)): 如果当前值本身是一个数组(即嵌套结构),则递归调用clean_obj($val)来处理这个子数组,并将返回的清洗结果重新赋值给$data[$key]。

4. 整合与完整代码示例

将获取数据和清洗逻辑结合起来,形成一个完整的脚本:

 $val) {            // 检查当前值是否为需要移除的无效值            // 使用 === 进行严格比较            if ($val === 'N/A' || $val === '-' || $val === '') {                unset($data[$key]); // 移除该键值对            }            // 如果当前值是数组,则递归调用自身进行清洗            else if (is_array($val)) {                $data[$key] = clean_obj($val);                // 可选:如果递归清洗后子数组变为空,也移除该键                // if (empty($data[$key])) {                //     unset($data[$key]);                // }            }        }    }    return $data; // 返回清洗后的数据}// 目标API的URL$url = 'https://coderbyte.com/api/challenges/json/json-cleaning';// 初始化cURL会话$ch = curl_init($url);// 设置cURL选项curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, 0);// 执行cURL请求$data = curl_exec($ch);// 关闭cURL会话curl_close($ch);// 检查cURL请求是否成功if ($data === false) {    echo "cURL请求失败: " . curl_error($ch) . "n";    exit;}// 将JSON字符串解码为PHP关联数组$newData = json_decode($data, true);// 检查JSON解码是否成功if (json_last_error() !== JSON_ERROR_NONE) {    echo "JSON解码失败: " . json_last_error_msg() . "n";    exit;}// 调用清洗函数处理数据$cleaned_array = clean_obj($newData);// 输出清洗后的结果// print_r($cleaned_array, 1) 会返回一个字符串,便于echo输出echo "" . print_r($cleaned_array, 1) . "";?>

5. 注意事项与最佳实践

错误处理: 在实际应用中,务必添加对cURL请求失败和JSON解码失败的错误处理。例如,检查curl_exec()的返回值和json_last_error()。性能优化: 对于非常庞大的JSON数据,递归函数可能会消耗较多内存和CPU。可以考虑使用迭代方式或其他优化策略,但对于大多数常见场景,递归是简洁有效的。灵活性: 如果清洗规则需要动态调整,可以将无效值列表作为参数传递给clean_obj函数,使其更具通用性。JSON输出: 如果最终需要将清洗后的数据作为JSON字符串输出,可以使用json_encode($cleaned_array)。严格比较: 在判断值是否相等时,使用===(严格比较)而不是==(宽松比较)可以避免因PHP的类型转换导致的意外行为。例如,0 == ” 为 true,但 0 === ” 为 false。

总结

本教程展示了如何结合PHP的cURL库和递归函数,高效地从外部API获取并清洗JSON数据。通过定义清晰的清洗规则和实现一个健壮的递归函数,我们可以确保数据在后续处理前达到所需的质量标准。这种方法不仅适用于本例中的特定清洗规则,也为处理更复杂的数据结构和清洗逻辑提供了可扩展的基础。

以上就是PHP cURL获取与递归清理JSON数据教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1293521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 09:09:48
下一篇 2025年12月11日 09:10:03

相关推荐

  • 币安交易平台官网入口 币安官方最新版v3.2.6APP下载安装

    作为全球知名的数字资产交易平台,币安(binance)为广大用户提供了安全、便捷的交易服务。为了保障您的账户与资产安全,强烈建议通过官方渠道访问和下载应用。本文将为您提供币安官网的访问指南、最新版v3.2.6 app的下载安装方法,以及详尽的新用户注册与账户安全设置流程。 币安官网直达: 币安官方a…

    2025年12月11日 好文分享
    000
  • 欧易交易所官网入口 欧易OKX最新版APP下载地址

    欧易(okx)是全球领先的数字资产交易平台之一,为广大用户提供安全、稳定的加密货币交易服务。为了确保您的资产安全,请务必通过官方渠道访问和下载欧易app。本文将为您提供欧易交易所的官方入口及最新版app下载指南,并针对安卓手机用户可能遇到的安装问题提供详细的解决方案。 欧易官网直达: 欧易官方app…

    2025年12月11日 好文分享
    000
  • 欧易交易平台 v6.134.3 2025 官方安卓版

    欧易(okx)交易平台 v6.134.3 官方安卓版是一款全球领先的数字资产交易应用。我们致力于为全球用户提供安全、稳定、可靠的数字资产交易服务,支持比特币(btc)、以太坊(eth)等上百种数字货币的币币交易和衍生品交易。通过我们先进的技术、严格的风控体系和用户友好的界面设计,您可以轻松管理您的数…

    2025年12月11日 好文分享
    000
  • 以太坊合并倒计时在哪里看 通俗讲解如何查看以太坊合并倒计时

    以太坊合并是其发展历史中一次备受瞩目的重大升级,众多爱好者都在密切关注其进程。本文将为您介绍几个主流的合并倒计时查看入口,并用通俗易懂的方式讲解如何看懂这些倒计时数据,帮助您轻松掌握这一历史性事件的最新动态。 以太坊主流交易所官网地址及APP推荐 1、币安binance: 2、欧易OKX: 3、火币…

    2025年12月11日
    000
  • 2025年科技巨头如何拥抱元宇宙与区块链?

    2025年,科技巨头将不再把元宇宙与区块链视为孤立的实验性项目,而是将其作为下一代互联网平台的核心基础设施进行深度整合。它们将通过构建底层硬件、开发开放式创作工具、以及融合基于区块链的经济体系,共同塑造一个强调沉浸式体验、用户所有权和去中心化交互的新数字现实。这一过程将从单纯的概念探索转向大规模的商…

    2025年12月11日
    000
  • 永续合约和杠杆的区别 一文带你了解什么是永续合约和杠杆

    在金融衍生品交易中,永续合约和杠杆是两个经常被提及但又容易混淆的概念。清晰地理解二者的定义、关系及核心区别,是交易者制定有效策略和管理风险的基础。本文将深入浅出地剖析这两个概念,帮助您建立清晰的认知框架。 币圈主流交易平台官网入口 1、币安binance:  2、欧易OKX: 3、火币HTX: 4、…

    2025年12月11日
    000
  • Web3.0入门终极指南:2025年如何从零开始投资虚拟货币?

    要在2025年从零开始投资虚拟货币,核心路径是:首先,投入时间学习web3.0和区块链的基础知识,理解比特币、以太坊等主流资产的价值;其次,选择一个信誉良好、安全合规的加密货币交易所并完成账户注册与身份验证;然后,通过法定货币入金,小额试水购买你的第一个加密货币;最后,学习使用数字账户,将资产从交易…

    2025年12月11日
    000
  • 盘点2025年最具潜力的十大山寨币 下一个百倍币会出现在哪些Web3赛道

    展望2025年,下一个百倍币很可能诞生于人工智能(ai)、真实世界资产(rwa)、depin(去中心化物理基础设施网络)以及高性能公链生态等前沿web3赛道。这些领域不仅解决了区块链技术的实际应用问题,也吸引了大量资本和开发者的关注,为其生态内的项目提供了巨大的增长潜力。 2025年虚拟货币主流交易…

    好文分享 2025年12月11日
    000
  • 稳定币定价方式下的资产链上化趋势详细解读

    目录 关键点介绍1. Genius Act的本质是下放货币的发行权和结算权,从而获得强化的货币定价权2. 稳定币通过货币定价形式的改变引发了全球金融链上化与资产链上化的改革3. 改革在迅速瓦解传统金融长期的卡特尔联盟,带来了混乱下的利益重组机遇4. Trump成功地将自身利益嫁接在历史转型的节点上形…

    2025年12月11日
    000
  • 统一交易帐户(UTA)是什么?Bybit统一交易帐户新手使用全教程

    目录 Bybit统一交易帐户(UTA)是什么?Bybit统一交易帐户新手使用全教程统一交易帐户支持的保证金模式Bybit 统一交易帐户风险分析Bybit 统一交易帐户优点:升级无门槛Bybit 统一交易帐户优点:资金效率高Bybit 统一交易帐户优点:高收益期现套利Bybit 统一交易帐户缺点:连带…

    2025年12月11日 好文分享
    000
  • 如何布局迎接比特币繁荣期?一文详解(2025版)

    目录 周期中期强势,而非狂热看涨目标价格:50万美元及以上ETF资金流向:机构资金全面涌入宏观顺风:为何世界需要比特币比特币优于山寨币分配和托管指南黄金与比特币比率:直观参照结论:增长的关键时刻 每当tuur demeester发布新的研究分析时,整个比特币社区都会高度关注。自2012年在adama…

    2025年12月11日 好文分享
    000
  • 什么是Aspecta(ASP币)?怎么样?ASP币主要功能、代币经济学及未来路线图介绍

    目录 什么是 Aspecta(ASP 代币)?Aspecta 平台与 ASP 代币的区别Aspecta Crypto 解决了哪些问题?1. 非流动性资产危机2. 缺乏透明的价格发现3. 独家准入壁垒4. 声誉和信任缺失Aspecta AI 平台开发故事Aspecta BuildKey 和 ASP T…

    2025年12月11日 好文分享
    000
  • C2C交易如何查询微信/支付宝实名教程

    目录 一、如何查询微信实名? 方法1 :通过添加好友转账,查看实名最后一个字 方法 2 :完成转账后申请电子凭证 二、如何查询支付宝实名? 方法 1 :收款后申请电子回单 方法 2 :添加好友并转账,查看实名末字 特别注意 重要提醒:核对信息一致性与账户安全 在欧易C2C交易过程中,系统不会直接显示…

    2025年12月11日 好文分享
    000
  • WLFI将孙宇晨地址列入黑名单 币安Binance最新安卓版下载 2025 v3.2.5官方正版

    币安(binance)是全球范围内广受欢迎的数字资产交易平台,为用户提供安全、稳定且高效的交易服务。它支持多种主流数字货币的交易,并提供现货、合约等丰富的交易产品,界面设计友好,操作便捷,无论是新手还是资深交易者都能快速上手。 币安全球官网: 币安官网app下载: WLFI项目方公开宣布,将知名行业…

    2025年12月11日
    000
  • Polkadot(DOT币)是什么?投资潜力如何?价格走势、未来发展介绍

    目录 DOT(波卡币)是什么?DOT(波卡币) 基本资讯表DOT(波卡币)募资价格波卡链Polkadot 是什么?Polkadot 的由来和创始人Polkadot 的核心特色Polkadot 的平行链插槽竞拍插槽竞拍是什么?插槽拍卖的众贷机制插槽拍卖的得主DOT(波卡币)有什么用途?DOT(波卡币)…

    2025年12月11日 好文分享
    000
  • 什么是加密货币资金费率套利?期货交易者的完整指南

    目录 什么是资金费率套利?永续期货中的资金费率如何运作?为什么不同交易所的资金费率会有所不同?内核资金费率套利策略资金费率套利的首选平台和工具作为交易者如何入门?资金费率套利作为一种交易策略是否能获利?资金费率套利有哪些成本、风险和挑战?总结资金费率套利常见问题1. 资金费率套利是无风险的吗?2. …

    2025年12月11日
    000
  • 以太坊(ETH)营销公司Etherealize获4000万美元融资,多家企业本周追加12亿美元投资详

    目录 Etherealize将资金用于机构级金融工具开发上市公司本周增加12.6亿美元ETHETH今年达到6000美元的概率接近50%‍ Electric Capital与Paradigm协助以太坊(ETH)倡导公司Etherealize完成4000万美元融资,公募公司本周已添加数十亿美元以太坊(E…

    2025年12月11日
    000
  • 独家解析:WLFI黑名单事件详解!如何在币安/欧易学习并规避类似风险?

    近期,WLFI项目方利用智能合约中的黑名单功能,将大量用户地址列入其中,导致其持有的数字资产无法进行任何操作,这一事件在社区内引发了轩然大波。这不仅仅是一次简单的资产冻结,更深刻地揭示了去中心化金融领域中,智能合约代码权限所带来的潜在风险,以及项目方权力边界模糊可能引发的信任危机。 对于广大市场参与…

    2025年12月11日
    000
  • 一文详细了解BitMine豪掷6500万美元购入ETH,董事长宣称以太坊迎来「1971时刻」

    目录 BitMine股价在交易日走高 Tom Lee再次确认6万美元以太坊目标价 BitMine董事长Tom Lee近日表示,他仍然坚信以太坊(ETH)未来有望达到6万美元。与此同时,该公司于周四宣布再度斥资6500万美元购入以太坊,这是其本月的首次增持动作。 作为目前全球持有以太坊最多的企业,Bi…

    2025年12月11日
    000
  • 为什么币安需要实名认证?币安实名认证操作流程

    目录 为什么币安需要实名认证?币安实名认证操作流程实名认证的重要性安全注意事项 对于中国用户而言,使用币安交易所时最常遇到的难题之一就是实名认证环节。根据2023年coingecko发布的数据,超过68%的亚洲用户因kyc(了解你的客户)流程问题而影响了交易体验。 那么,币安为何要求实名认证?具体该…

    2025年12月11日 好文分享
    000

发表回复

登录后才能评论
关注微信