
在php中,我们通常使用curl库来发送http请求。以下代码演示了如何向指定url发起get请求并获取json响应:
<?php
// 初始化cURL会话
$ch = curl_init('https://coderbyte.com/api/challenges/json/json-cleaning');
// 设置cURL选项
// CURLOPT_RETURNTRANSFER: 将curl_exec()获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// CURLOPT_HEADER: 不输出响应头
curl_setopt($ch, CURLOPT_HEADER, 0);
// 执行cURL请求并获取响应数据
$data = curl_exec($ch);
// 关闭cURL会话
curl_close($ch);
// 将JSON字符串解码为PHP数组
$newData = json_decode($data, true);
// 打印原始解码后的数据(用于调试)
// print_r($newData);
?>这段代码首先初始化一个cURL句柄,然后配置它以返回响应内容而不输出响应头。curl_exec执行请求,并将返回的JSON字符串存储在$data变量中。最后,json_decode($data, true)将JSON字符串转换为一个关联数组,方便后续处理。
我们的目标是清理一个可能包含多层嵌套的JSON对象。清理规则如下:
为了高效处理任意深度的嵌套结构,递归函数是最佳选择。
下面是一个实现上述清理逻辑的递归函数clean_obj:
立即学习“PHP免费学习笔记(深入)”;
<?php
/**
* 递归清理PHP数组(对应JSON对象)中的特定值。
* 移除值为 'N/A', '-', 或空字符串的元素。
*
* @param array $data 待清理的数组。
* @return array 清理后的数组。
*/
function clean_obj(array $data): array
{
foreach ($data as $key => $val) {
// 检查当前值是否为需要移除的特定字符串
if (is_string($val) && ($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部分与清理函数结合起来,即可完成整个流程:
<?php
// ... (前面获取JSON数据和定义clean_obj函数的代码) ...
// 初始化cURL会话
$ch = curl_init('https://coderbyte.com/api/challenges/json/json-cleaning');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
// 将JSON字符串解码为PHP数组
$newData = json_decode($data, true);
// 调用清理函数处理数据
$cleanedArray = clean_obj($newData);
// 打印清理后的数据
echo "<pre>" . print_r($cleanedArray, true) . "</pre>";
?>这段代码首先获取并解码JSON数据,然后将解码后的PHP数组传递给clean_obj函数进行清理。最后,使用print_r以可读格式输出清理后的数组。<pre>标签有助于在浏览器中保持输出的格式。
通过结合cURL进行网络请求和递归函数处理嵌套数据结构,我们可以有效地从远程API获取JSON数据并根据特定规则进行深度清理。这种方法不仅能够处理简单的键值对,也能优雅地管理复杂的多层嵌套数据,确保最终得到的数据是干净、有效的。在实际应用中,务必加入健壮的错误处理机制,以应对各种潜在问题。
以上就是PHP中获取与清理嵌套JSON数据:CURL请求与递归函数实践的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号