在PHP中修改后覆盖json

时间:2015-01-16 03:09:20

标签: php json

我使用以下代码在我的json中进行了修改:

$id = "hotel_name";
$value ="My Hotel";

$json = json_decode(file_get_contents('datas.json'));
$datas = $json->datas;

foreach ($datas as $category => $data) {
    foreach ($data as $element) {
        if($element->id==$id) {
            $datas->$category->$element->$id = $value;
        }
    }
}

$newJson = json_encode($element);

file_put_contents('datas.json', $newJson);

但它没有把所有内容都放在其中。

请问如何解决?


我的json有以下内容:

{
    "datas": {
        "General": [
            {
                "field": "hotel_name",
                "name": "My Hotel name"
            }
        ]     
    }
}

2 个答案:

答案 0 :(得分:0)

您正在访问$ element变量,该变量仅包含您最内层的数据

{
    "field": "hotel_name",
    "name": "My Hotel name"
}

如果您需要更多数据,则必须使用新更新的$ element变量重新分配最外层$ datas变量和子项。我建议创建一个空变量来存储新数据,而不是改变原始副本。

答案 1 :(得分:0)

您应该编码数据,而不仅仅是最后一个元素,对吗?

// before
$newJson = json_encode($element);

// after
$newJson = json_encode($datas);

顺便说一句,如果将数据转换为数组而不是对象,您可能会发现使用数据更容易。

$json = json_decode(file_get_contents('datas.json'), true);