Добавление данных в JSON

0

Я делаю веб-сервис 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, который я использую, - это

EDIT Добавлено больше кода, чтобы быть более полным

$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));
  • 1
    какие ошибки вы получаете?
  • 2
    используйте json_encode ()
Показать ещё 4 комментария
Теги:
arrays
rest
web-services

2 ответа

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню