如何使用PHP将JSON数据插入到JSON数组中
如何用PHP将新数据插入JSON数组
嘿,我明白你要做的事——把新的MC版本数据添加到url.json里的minecraft数组中对吧?先梳理下你的现有内容,再一步步解决问题:
你的现有文件内容
url.json
{ "minecraft" : [ { "version" : "MC v1", "url" : "http://www.google.com" }, { "version" : "MC v12", "url" : "http://www.google.com" } ] }
你的admin.php片段
## Add MC to version $Version = "MC " . strtolower($_POST["version"]); ## Insert Data To JSON file!!!! $Data_Now = file_get_contents('url.json'); $json = json_decode($D...
完整解决方案
你的思路是对的,但还差几个关键步骤:解码后要把新数据加入数组,再重新编码写回文件。这里给你补全并优化代码,还加了基础的错误处理:
<?php // 先检查POST参数是否存在,避免报错 if (!isset($_POST["version"]) || !isset($_POST["url"])) { die("请提供版本号和URL参数"); } // 构造新的版本数据 $newVersion = [ "version" => "MC " . strtolower($_POST["version"]), "url" => $_POST["url"] // 假设你也需要从POST获取URL,可根据实际需求调整 ]; // 读取现有JSON文件 $jsonFile = 'url.json'; $dataNow = file_get_contents($jsonFile); if ($dataNow === false) { die("无法读取JSON文件,请检查文件路径或权限"); } // 解码JSON为PHP关联数组(第二个参数true很重要,不然会得到对象) $jsonData = json_decode($dataNow, true); if ($jsonData === null) { die("JSON格式无效,请检查url.json的内容"); } // 将新数据添加到minecraft数组末尾 $jsonData['minecraft'][] = $newVersion; // 重新编码为JSON,用JSON_PRETTY_PRINT保持格式美观 $updatedJson = json_encode($jsonData, JSON_PRETTY_PRINT); if ($updatedJson === false) { die("编码JSON失败,请检查数据格式"); } // 写回文件 if (file_put_contents($jsonFile, $updatedJson) === false) { die("无法写入JSON文件,请检查文件写入权限"); } echo "数据添加成功!"; ?>
关键要点说明
json_decode($dataNow, true):第二个参数设为true,会把JSON对象转换成PHP关联数组,操作起来更直观;如果不传这个参数,得到的是stdClass对象,需要用->访问属性。$jsonData['minecraft'][] = $newVersion:这行是核心逻辑,直接把新的数组元素追加到minecraft数组的末尾,和你原有的数据结构保持一致。JSON_PRETTY_PRINT:编码时加上这个常量,生成的JSON会有缩进和换行,和你原文件的格式保持一致,可读性更强。- 错误处理:添加了文件读写、JSON解码编码的错误检查,避免出现白屏或模糊报错,方便你调试问题。
内容的提问来源于stack exchange,提问作者KTK27
相关产品推荐
相关产品推荐

