我有一个带有JSON对象的JSON文件我试图使用PHP进行读取和编辑,但我想更改特定的Key值,这些值被证明可以解决问题。任何人都有任何他们可能知道可能有帮助的指针或链接吗?
由于
答案 0 :(得分:2)
你可以试试这个。
首先,解码你的JSON:
$json_object = file_get_contents('some_file_name.json');
$data = json_decode($json_object, true);
然后编辑您想要的内容,例如:
$data['some_key'] = "some_value";
最后将其重写回文件(或更新的文件):
$json_object = json_encode($data);
file_put_contents('some_file_name.json', $json_object);
注意:我认为JSON来自一个文件,但是代替那个文件系统函数,你可以很好地使用任何返回JSON对象的东西。
答案 1 :(得分:0)
如果您有嵌套密钥,则可以执行以下操作:
<强> 1。将JSON解码为PHP数组
$arrayData = json_decode($jsonData, true);
<强> 2。以递归方式指定替换
$replacementData = array('a' => array('b' => 'random2'), 'c' => 'abc');
作为示例,这将使用 random2 替换密钥b
内的密钥a
的值,并使用值<替换根级别中的密钥c
的值em> abc 。
第3。递归执行替换
$newArrayData = array_replace_recursive($arrayData, $replacementData);
<强> 4。编码新的JSON
$newJsonData = json_encode($newArrayData);
测试代码
echo print_r(array_replace_recursive(array('a' => array('b' => 'random'), 'c' => 'def'), array('a' => array('b' => 'random2'), 'c' => 'abc')), true);
应使用 random2 和b
值 def 替换a
值随机中的c
abc 并输出:
Array(
[a] => Array
(
[b] => random2
)
[c] => abc
)
答案 2 :(得分:-1)
将json转换为数组并递归更新键(depth-nth)
function json_overwrite($json_original, $json_overwrite)
{
$original = json_decode($json_original, true);
$overwrite = json_decode($json_overwrite, true);
$original = array_overwrite($original, $overwrite);
return json_encode($original);
}
递归迭代并替换$ original
function array_overwrite(&$original, $overwrite)
{
// Not included in function signature so we can return silently if not an array
if (!is_array($overwrite)) {
return;
}
if (!is_array($original)) {
$original = $overwrite;
}
foreach($overwrite as $key => $value) {
if (array_key_exists($key, $original) && is_array($value)) {
array_overwrite($original[$key], $overwrite[$key]);
} else {
$original[$key] = $value;
}
}
return $original;
}
快速测试
$json1 = '{"hello": 1, "hello2": {"come": "here!", "you": 2} }';
$json2 = '{"hello": 2, "hello2": {"come": "here!", "you": 3} }';
var_dump(json_overwrite($json1, $json2));