为什么[Object]在node.js中打印到控制台而不是对象的内容?

时间:2015-04-19 07:49:37

标签: javascript json node.js

我试图访问spotify API返回的播放列表对象中的每首歌曲。当我获得JSON对象时,它会在" items"中返回一堆[Object]内容,这是轨道所在的位置:

spotifyApi.getPlaylist(id, listID)
    .then(function (data) {
        // printing data from this line
        console.log('The playlist contains these tracks', data.body);
    }, function (err) {
        console.log('Something went wrong!', err);
    });

输出:

Playlist name : thug lif3  Playlist ID: 41moBc7H5bWrR3iiY0Zu9Q
The playlist contains these tracks {
    /*~~~ lots of skipped output ~~~*/
    { href: 'https://api.spotify.com/v1/users/...',
        /*~~~        why [Object]?            ~~~*/
        items: [ [Object], [Object], [Object] ],
        limit: 100
    },
}

这些[对象]事物是无效的标志,还是有某种方法可以解析它们并从中获取数据? Spotify网站上的API资源管理器会显示"项目"之后的实际跟踪对象,因此我很困惑为什么我的应用请求不会这样做。

4 个答案:

答案 0 :(得分:2)

您可以console.log输出正确的JSON:

console.log('The playlist contains these tracks %j', data.body);

%j记录在案here)。

console.log为对象生成的常规输出不是正确的JSON,也仅限于某个对象深度;之后,您将获得[Object]字符串。

答案 1 :(得分:1)

这就是嵌套对象打印到节点控制台的深度。它们仍然以编程方式提供。在您的情况下,使用data.body.tracks.items来访问对象。

如果你想要一台漂亮的打印机,你可以使用bunyan,这将使嵌套对象(以及其他所有东西)在控制台中显得非常好。

答案 2 :(得分:1)

这是节点的相当正常的行为。以编程方式向下钻取或使用util.inspect link

答案 3 :(得分:1)

这应该可以解决问题:

var util = require('util');
...
spotifyApi.getPlaylist(id, listID)
    .then(function (data) {
        // printing data from this line
        console.log('The playlist contains these tracks', util.inspect(data.body, { showHidden: true, depth: null });
    }, function (err) {
        console.log('Something went wrong!', err);
    });