2017-06-22 07:43
浏览 26


I am using this php library to communicate with the spotify api to get my user details. The spotify api returns user data which I then want to add to a json file. Basically, whatever is sent back from the api I want to append to the json file for each user.

The data returned from the api looks like the following when I do print_r($api->me()); This is basically coming from this api call.

stdClass Object ( [display_name] => Paul Flanagan 
[email] => 
[external_urls] => stdClass Object ( 
[spotify] => ) [followers] => stdClass Object ( 
[href] => [total] => 19 ) 
[href] => 
[id] => 21aydctlhgjst3z7saj2rb4pq 
[images] => Array ( [0] => stdClass Object ( 
[height] => [url] => 
[width] => ) ) [type] => user [uri] => spotify:user:21aydctlhgjst3z7saj2rb4pq )

I want to write this code to a json file

I have attempted many approaches but as I am more javascript focused than php I am struggling to write the data correctly. My latest attempt at the code looks like this:


    require 'vendor/autoload.php';

    $session = new SpotifyWebAPI\Session(

    $api = new SpotifyWebAPI\SpotifyWebAPI();

    if (isset($_GET['code'])) {

        $file = "users.json";
        $json = json_decode(file_get_contents($file), true);
        $file = fopen($file,'w+');
        fwrite($file, $api->me());

    } else {
    $options = [
        'scope' => [

    header('Location: ' . $session->getAuthorizeUrl($options)$

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongyo7931 2017-06-22 08:01

    As $api->me() returns object - you cannot write it to a file directly. You should convert object to a string. Simple way is to json_encode it:

    $file = "users.json";
    $json = json_decode(file_get_contents($file), true);
    $file = fopen($file,'w+');
    fwrite($file, json_encode($api->me()));

    Next problem - is overwriting data. As you open file with w+ - you file gets truncated to 0 length.

    Solution here depends on what you need with previous data. If you want to rewrite some data - I think current behaviour does it already.

    If you want to append data to a file - you should use another mode when you open file, for example a+. But in this case, file contents won't be correct json, as you write to file not a single json string, but several strings, which is not correct json. So, it's up to you to find a proper solution.


    According to file name, I suppose you store users in it. So, I think there's a list of users, encoded in json. So, a brief solution can be:

    $file = "users.json";
    $json = json_decode(file_get_contents($file), true);
    // Now $json stores list of you current users. I suppose it's a simple array of arrays
    // This is data for a new user
    $new_user = $api->me();
    // as data `$new_user` is object, I think you need to convert it to array
    // this can be done as:
    $new_user = json_decode(json_encode($new_user), true);
    // now, add new user to existsing array
    $json[] = $new_user; 
    $file = fopen($file,'w+');
    // now we can encode `$json` back and write it to a file
    fwrite($file, json_encode($json));
    解决 无用
    打赏 举报

相关推荐 更多相似问题