从数组中编辑json中的值

时间:2014-08-31 12:02:29

标签: php arrays json

我有这样一个数组:

Array
(
    [fruit] => Banana
    [country] => Canada
)

如何使用包含这些新数据的循环更新我的json文件?

我的json是一个文件,看起来很简单:

{"fruit" : "Cherry", "country" : "Mexico", "weight" : "28"}

注意:我想更新值fruit和country,而不是所有json。

感谢。

3 个答案:

答案 0 :(得分:1)

正如我所说,您可以将json解码为关联数组(注意json_decode()使用true上的第二个参数集),循环抛出它并在迭代时更新它。最后再次编码为json,如下所示

$array = array('fruit' => 'Banana', 'country' => 'Canada');
$json = '{"fruit" : "Cherry", "country" : "Mexico", "weight" : "28"}';
$mjson = json_decode($json,true);

foreach($array as $key => $val) {
    if(isset($mjson[$key])) { 
        $mjson[$key] = $val;
    }
}

$jjson = json_encode($mjson);
print_r($jjson);

//Output: {"fruit":"Banana","country":"Canada","weight":"28"}

Live demo

答案 1 :(得分:0)

$input = /** some json string **/
$json = json_decode($input, true); // to assoc array
// update values
$json["fruit"] = "Cherry";
$json["country"] = "Mexico";
$json["weight"] = "28";

$ouput = json_encode($json); // back to json

// save to file etc.

这有帮助吗?

答案 2 :(得分:0)

您无法直接编辑文件,就像它是一个对象一样。 首先你需要读取文件,而不是解码json:

e.g:

$string='{"name":"John Adams"}';
$json_a=json_decode($string,true);

请记住,如果您使用第二个参数" true"在json_a中,您将获得关联数组。像这样:

$json_a=array("name"=>"John Adams");

但是如果你想让对象不设置第二个参数:

$string='{"name":"John Adams"}';
$json_o=json_decode($string);

这里json_decode($ string)返回一个对象。现在你可以这样做:

echo $json_o->name;

修改json对象时,请将其写回文件。