0

0

PHPJSON如何过滤字段_php只输出json部分数据的操作【教程】

絕刀狂花

絕刀狂花

发布时间:2026-03-10 16:53:24

|

697人浏览过

|

来源于php中文网

原创

最可靠方式是编码前用 unset() 或 array_intersect_key() 删除不需要的键,而非对 json 字符串正则替换;array_intersect_key() 需传关联数组作白名单,不递归处理嵌套;深层或动态字段应使用递归过滤函数。

phpjson如何过滤字段_php只输出json部分数据的操作【教程】

PHP 中用 json_encode() 前手动过滤数组字段最可靠

直接删掉不需要的键,比在 JSON 字符串里正则替换安全得多。PHP 没有原生“只输出指定字段的 JSON”函数,json_encode() 本身不接受字段白名单参数,硬要在编码后操作字符串,会踩空值、转义、嵌套结构等坑。

常见错误现象:json_encode($data) 输出了太多敏感字段(比如 password_hashcreated_at),API 接口暴露了不该暴露的数据。

  • unset()array_intersect_key() 提前清理数组,再传给 json_encode()
  • 避免用 str_replace()preg_replace() 处理已编码的 JSON 字符串——JSON 值里可能含相同字段名(如日志内容里有 "id":123),误删
  • 如果字段逻辑复杂(比如按角色动态过滤),封装成一个 filterJsonFields() 函数,传入原始数组和允许字段列表

array_intersect_key() 快速保留白名单字段

适合字段名固定、层级扁平的场景,代码短且不易出错。它比循环 + unset() 更简洁,也比 array_filter() 配合 array_keys() 更直观。

示例:只保留 idnameemail

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

ChatMind
ChatMind

ChatMind是一款AI生成思维导图的效率工具,可以通过AI对话生成和编辑思维导图。

下载
$whitelist = ['id' => '', 'name' => '', 'email' => ''];
$filtered = array_intersect_key($user, $whitelist);
echo json_encode($filtered);
  • array_intersect_key() 的第二个参数必须是关联数组(键存在),不能是 ['id','name'] 这样的索引数组
  • 不递归处理嵌套数组,如果 $user['profile'] 是个子数组且也要过滤,得单独处理
  • PHP 7.4+ 可配合箭头函数写成一行,但可读性下降,不推荐在关键路径上这么用

遇到嵌套数据或动态字段时,别硬套单层过滤

当数据结构含多层(如 user → posts → comments)或字段名来自配置/数据库时,硬用 array_intersect_key() 会漏掉深层字段,也难维护。

这时候该用递归白名单过滤函数,而不是拼接 JSON 后再切字符串。

  • 手动写递归函数时,注意判断 is_array()!is_object(),PHP 默认不把对象转成数组再过滤
  • 如果源数据是 stdClass 对象,先用 (array)$obj 转换,但要注意私有属性不可见
  • 性能影响:深度嵌套 + 大量字段时,递归调用开销略高,但远小于后续 JSON 解码 → 修改 → 重编码的三步操作

json_encode()JSON_UNESCAPED_UNICODE 等选项和字段过滤无关

有人以为加个 flag 就能控制输出字段,其实不是。JSON_UNESCAPED_UNICODEJSON_PRETTY_PRINT 这些只改编码行为,不影响内容取舍。

典型误解:json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PARTIAL_OUTPUT_ON_ERROR) 依然会输出全部字段。

  • JSON_PARTIAL_OUTPUT_ON_ERROR 只在某个值无法序列化时跳过它(比如资源类型),不是按字段名过滤
  • 没有 JSON_WHITELIST_FIELDS 这种选项,别在文档里浪费时间找
  • 如果用了 Laravel、Symfony 等框架,优先查它们的 API 资源类(如 JsonResource),那是更上层的字段控制方案,不是 PHP 底层能力
字段白名单逻辑越早介入越好,从数据库查询时就 SELECT id, name, email 开始,到数组构造、再到 json_encode(),每层都守住边界。临时补个 unset() 看似简单,但容易漏掉异步任务、缓存回写、日志记录等旁路路径。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP Symfony框架
PHP Symfony框架

本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

87

2025.09.11

laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

339

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

771

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

140

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

79

2025.08.05

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

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

精品课程

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

共137课时 | 13.2万人学习

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

共6课时 | 11.3万人学习

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

共13课时 | 1.0万人学习

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

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