将数据添加到json

时间:2015-01-08 11:08:21

标签: php arrays json web-services rest

我正在制作RESTful网络服务,我想将数据添加到JSON文件中。我现在收到错误和警告,但我无法弄清楚我错过了什么或做错了什么。

JSON文件看起来像这样

    {
    "charts": {
        "title": "Top 40",
        "song": {
            "id":"1",
            "title": "Title",
            "artist": "Name" ,
            "genre": "Something",
            "weeks": "4",
            "highest_rating": "18",
            "year": "2014",
            "youtube": "link here"
        }
    }
}

我想在添加数据时得到类似的内容

 {
        "charts": {
            "title": "Top 40",
            "song": {
                "id":"1",
                "title": "Title",
                "artist": "Name" ,
                "genre": "Something",
                "weeks": "4",
                "highest_rating": "18",
                "year": "2014",
                "youtube": "link here"
                }
               {
                "id":"2",
                "title": "Title",
                "artist": "Name" ,
                "genre": "Something",
                "weeks": "4",
                "highest_rating": "18",
                "year": "2014",
                "youtube": "link here"
            }
        }
    }

我使用的PHP代码是

编辑添加了更多代码以便更完整

$file = file_get_contents("data.json");
    $data = json_decode($file, true);

    $data->charts->songs[] = array(
        'id'=>$_POST["id"],
        'title'=>$_POST["title"],
        'artist'=>$_POST["artist"],
        'genre'=>$_POST["genre"],
        'week'=>$_POST["week"],
        'highest_rating'=>$_POST["highest_rating"],
        'year'=>$_POST["year"],
        'youtube'=>$_POST["youtube"]
    );

    file_put_contents('data.json',json_encode($data));

2 个答案:

答案 0 :(得分:2)

您正在尝试访问json_decode生成的多维数组,就像它是一个对象一样。

替换此行

$data = json_decode($file, true);

用这个

$data = json_decode($file, false);

如果您希望结果是对象而不是多维数组。

另一方面,如果您对$ data是多维数组感到高兴,那么就像这样访问它

$data['charts']['songs'][] = array(

http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:0)

尝试json_encode功能。 $data->charts[] = json_encode($_POST);