将数据附加到json文件php

时间:2017-06-22 07:43:32

标签: php json

我正在使用documentation与spotify api进行通信以获取我的用户详细信息。 spotify api返回用户数据,然后我想将其添加到json文件中。基本上,无论从api发回的是什么,我都希望为每个用户附加到json文件。

当我print_r($api->me());时,从api返回的数据如下所示:这基本上来自this php library

stdClass Object ( [display_name] => Paul Flanagan 
[email] => paulflanagan@gmail.com 
[external_urls] => stdClass Object ( 
[spotify] => https://open.spotify.com/user/21aydctlhgjst3z7saj2rb4pq ) [followers] => stdClass Object ( 
[href] => [total] => 19 ) 
[href] => https://api.spotify.com/v1/users/2391231jasdasd1 
[id] => 21aydctlhgjst3z7saj2rb4pq 
[images] => Array ( [0] => stdClass Object ( 
[height] => [url] => https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/18301863_452622995075637_5517698155320169855_n.jpg?oh=9e949fafd3ee84705ea5c1fa1aa9c811&oe=59C9F63C 
[width] => ) ) [type] => user [uri] => spotify:user:21aydctlhgjst3z7saj2rb4pq )

我想将此代码写入json文件

我尝试了很多方法,但由于我比php更专注于JavaScript,我正在努力正确地编写数据。我对代码的最新尝试如下:

<?php

    require 'vendor/autoload.php';

    $session = new SpotifyWebAPI\Session(
        'KEY1',
        'KEY2',
        'CALLBACK_URL'
    );

    $api = new SpotifyWebAPI\SpotifyWebAPI();

    if (isset($_GET['code'])) {
        $session->requestAccessToken($_GET['code']);
        $api->setAccessToken($session->getAccessToken());

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

        print_r($api->me());
    } else {
    $options = [
        'scope' => [
            'user-read-email',
        ],
    ];

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

    }
?>

1 个答案:

答案 0 :(得分:1)

$api->me()返回object时 - 您无法直接将其写入文件。您应该将对象转换为string。简单的方法是json_encode

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

下一个问题 - 覆盖数据。当您使用w+打开文件时 - 您的文件被截断为0长度。

这里的解决方案取决于您以前的数据需要什么。如果你想重写一些数据 - 我认为目前的行为已经成功了。

如果要将数据附加到文件,则应在打开文件时使用another mode,例如a+。但在这种情况下,文件内容将不正确json,因为您写入文件不是单个json字符串,而是几个字符串,正确的json。因此,您需要找到合适的解决方案。

<强>更新

根据文件名,我想你将用户存储在其中。所以,我认为有一个用户列表,用json编码。因此,一个简短的解决方案可以是:

$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));
fclose($file);