0

0

PHP如何替换JSON文件中的数据_JSON内容修改方法【教程】

雪夜

雪夜

发布时间:2026-02-13 09:38:02

|

550人浏览过

|

来源于php中文网

原创

php修改json文件必须严格遵循“读取→解码→修改→编码→写回”流程,需检查json_last_error()、文件权限、bom头及编码,推荐json_decode($json, true)配合array_replace_recursive安全更新。

php如何替换json文件中的数据_json内容修改方法【教程】

直接用 file_get_contents + json_decode 读取并修改 JSON 文件内容

PHP 没有“直接编辑 JSON 文件某字段”的内置函数,必须走“读取 → 解码 → 修改 → 编码 → 写回”流程。跳过解码或编码任一环节,都会导致数据损坏或写入乱码。

常见错误现象:json_encode 后写入文件变成空字符串、中文变 \uXXXX、数组变对象(或反之)、结构错乱。

  • 务必检查 json_last_error(),尤其在 json_decode 后——空文件、BOM 头、非 UTF-8 编码都会让解码失败返回 null
  • 修改前先用 is_array()is_object() 确认解码结果类型,避免对 null 调用数组操作
  • 写入时建议加 JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT,否则中文被转义,且无缩进难调试

json_decode 的第二个参数设为 true 还是 false

这决定后续怎么改数据:设为 true 得到关联数组,用方括号语法修改;设为 false(默认)得到 stdClass 对象,必须用箭头语法。

实际场景中,绝大多数 JSON 配置文件都是键值结构,用数组更直观、兼容性更好(比如 foreachisset()array_key_exists() 都原生支持)。

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

php中级教程之ajax技术
php中级教程之ajax技术

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。《php中级教程之ajax技术》带你快速

下载
  • 想改 {"user": {"name": "Alice"}} 中的 name:用 $data['user']['name'] = 'Bob'true)比 $data->user->name = 'Bob'false)更少出错
  • 如果原始 JSON 有同名数字键(如 [{"id":1}, {"id":2}]),两种方式都可遍历,但数组方式支持 array_column 等函数
  • 注意:json_decode($json, false) 返回的对象,不能用 isset($obj->missing) 安全判断,得用 property_exists()

写回文件前必须用 file_put_contents 并检查返回值

写入失败不报错是常见盲区——磁盘满、目录无写权限、父目录不存在,都会让 file_put_contents 返回 false,但脚本继续执行,结果就是 JSON 文件被清空或没更新。

示例关键逻辑:

if (false === file_put_contents($path, $encoded_json)) {
    throw new RuntimeException('Failed to write JSON file: ' . $path);
}
  • 路径必须是绝对路径或确保当前工作目录正确,相对路径在 CLI 和 Web 下行为可能不一致
  • 写入前可先 is_writable(dirname($path)) 检查目录权限
  • 生产环境建议加文件锁(flock),避免并发写入覆盖

嵌套深、字段动态的场景下,别硬写多层 isset 判断

比如要安全修改 $data['config']['features']['dark_mode']['enabled'],逐层判空既啰嗦又易漏。推荐封装一个递归设置函数,或用 PHP 8.0+ 的空合并链式操作(?->)配合临时变量。

更实用的做法是:先用 json_decode($json, true),再用 array_replace_recursive 合并补丁数组,而不是手动钻进多层结构。

  • 例如只改 dark_mode.enabled,构造 $patch = ['config' => ['features' => ['dark_mode' => ['enabled' => true]]]],然后 $data = array_replace_recursive($data, $patch)
  • 注意:array_replace_recursive 会覆盖整个子数组,不是“精准定位单个字段”,需确认是否符合业务语义
  • 若字段路径不确定(如 key 来自用户输入),务必过滤非法字符(../)、限制层级深度,防止路径遍历或内存耗尽
实际改 JSON 最容易被忽略的点是编码和权限:文件本身带 BOM 头会导致 json_decode 失败;Web 服务器运行用户(如 www-data)对文件所在目录没有写权限,file_put_contents 就静默失败。这两处不排查,其他逻辑再正确也没用。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

244

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

705

2024.03.01

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

162

2025.12.04

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

529

2023.08.03

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

4

2026.02.12

热门下载

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

精品课程

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

共137课时 | 11.6万人学习

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

共6课时 | 11.2万人学习

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

共13课时 | 0.9万人学习

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

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