使用 PHP 清理 JSON 数据:移除无效值

霞舞
发布: 2025-08-30 18:56:22
原创
579人浏览过

使用 php 清理 json 数据:移除无效值

本文档旨在指导开发者如何使用 PHP 从 JSON 数据中移除特定的无效值,例如 "N/A"、"-" 和空字符串。我们将通过一个实际的 API 请求示例,并提供一个递归函数来高效地清理数据,最终输出干净的 JSON 格式数据。

从 API 获取 JSON 数据

首先,我们需要使用 PHP 的 curl 库从指定的 API 端点获取 JSON 数据。以下代码展示了如何发起一个 GET 请求,并获取返回的 JSON 字符串:

<?php

$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 数组
$jsonData = json_decode($data, true);

// 打印原始数据(可选,用于调试)
// print_r($jsonData);

?>
登录后复制

这段代码首先初始化一个 curl 会话,设置请求的 URL,然后配置选项以确保响应内容作为字符串返回。curl_exec 函数执行请求并获取响应,最后 curl_close 关闭会话。json_decode 函数将返回的 JSON 字符串转换为 PHP 数组,方便后续处理。

创建递归清理函数

接下来,我们需要创建一个递归函数,用于遍历 JSON 数据(PHP 数组),并移除所有值为 "N/A"、"-" 或空字符串的键值对。如果遇到数组类型的元素,则递归调用自身进行处理。

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

<?php

function clean_obj($data) {
    if (is_array($data)) {
        foreach ($data as $key => $val) {
            if ($val === 'N/A' || $val === '-' || $val === '') {
                unset($data[$key]);
            } elseif (is_array($val)) {
                $data[$key] = clean_obj($val);
            }
        }
    }
    return $data;
}

?>
登录后复制

这个 clean_obj 函数接收一个数组作为输入。它遍历数组中的每个元素,如果元素的值等于 "N/A"、"-" 或空字符串,则使用 unset 函数移除该键值对。如果元素的值是一个数组,则递归调用 clean_obj 函数来处理这个子数组。注意这里使用了严格等于 === 来进行比较,以避免类型转换带来的问题。

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online

应用清理函数并输出结果

现在,我们可以将从 API 获取的 JSON 数据传递给 clean_obj 函数,并输出清理后的结果。

<?php

// ... (之前的 curl 代码) ...

// 清理数据
$new_array = clean_obj($jsonData);

// 输出清理后的数据
echo "<pre>";
print_r($new_array);
echo "</pre>";

?>
登录后复制

这段代码首先调用 clean_obj 函数来清理从 API 获取的 JSON 数据。然后,使用 zuojiankuohaophpcnpre> 标签和 print_r 函数将清理后的数组以易于阅读的格式输出到浏览器

完整示例代码

以下是完整的示例代码,包括从 API 获取数据、清理数据和输出结果:

<?php

function clean_obj($data) {
    if (is_array($data)) {
        foreach ($data as $key => $val) {
            if ($val === 'N/A' || $val === '-' || $val === '') {
                unset($data[$key]);
            } elseif (is_array($val)) {
                $data[$key] = clean_obj($val);
            }
        }
    }
    return $data;
}


$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);
$jsonData = json_decode($data, true);
$new_array=clean_obj($jsonData);

echo "<pre>";
print_r($new_array);
echo "</pre>";

?>
登录后复制

注意事项

  • 错误处理: 在生产环境中,应该添加适当的错误处理机制,例如检查 curl_exec 的返回值,以确保请求成功。
  • 数据类型: 上述代码假设所有需要移除的值都是字符串类型。如果JSON数据中包含其他类型的值(例如数字),可能需要修改 clean_obj 函数以适应不同的数据类型。
  • 性能: 对于大型 JSON 数据,递归函数可能会影响性能。可以考虑使用迭代方法来优化清理过程。
  • 编码: 确保 PHP 脚本和 JSON 数据的编码一致(通常是 UTF-8),以避免乱码问题。

总结

本文档介绍了如何使用 PHP 从 JSON 数据中移除无效值。通过使用 curl 库获取 JSON 数据,并使用递归函数 clean_obj 清理数据,可以有效地处理来自 API 的 JSON 响应,并获得干净、可用的数据。 请务必根据实际需求调整代码,并添加适当的错误处理和性能优化措施。

以上就是使用 PHP 清理 JSON 数据:移除无效值的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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