【问题标题】:How to I access many layers into a json array? Angularjs如何将多个层访问到 json 数组中? Angularjs
【发布时间】:2016-01-12 10:49:05
【问题描述】:

在与这个问题争论了几个小时之后,我想我需要重新表述这个问题。

我有一个包含对象数组的对象;

                                Playlist: [

{ “add_at”:“2015-11-13T20:55:06Z”, “添加者”:{ “外部网址”:{ "spotify": "http://open.spotify.com/user/spotify_canada" }, "href": "https://api.spotify.com/v1/users/spotify_canada", "id": "spotify_canada", “类型”:“用户”, “uri”:“spotify:用户:spotify_canada” }, “is_local”:假, “追踪”: { “专辑”:{ "album_type": "专辑", “available_markets”:[ "CA", "MX", “我们” ], “外部网址”:{ "spotify": "https://open.spotify.com/album/6Fr2rQkZ383FcMqFyT7yPr" }, "href": "https://api.spotify.com/v1/albums/6Fr2rQkZ383FcMqFyT7yPr", “id”:“6Fr2rQkZ383FcMqFyT7yPr”, “图片”: [ { “身高”:640, "url": "https://i.scdn.co/image/8b47495ce0c4a341f7196f70bcf4361e6257c1a0", “宽度”:640 }, { “身高”:300, "url": "https://i.scdn.co/image/da1e8958b6260e832660d0c5f3c80e9569c388c8", “宽度”:300 }, { “身高”:64, "url": "https://i.scdn.co/image/478dbfd0e579dee7392707b9a6848faff0cdfefd", “宽度”:64 } ], "name": "用途(豪华)", “类型”:“专辑”, “uri”:“spotify:专辑:6Fr2rQkZ383FcMqFyT7yPr” }, “艺术家”:[ { “外部网址”:{ "spotify": "https://open.spotify.com/artist/1uNFoZAHBGtllmzznpCI3s" }, "href": "https://api.spotify.com/v1/artists/1uNFoZAHBGtllmzznpCI3s", "id": "1uNFoZAHBGtllmzznpCI3s", “名称”:“贾斯汀比伯”, “类型”:“艺术家”, “uri”:“spotify:艺术家:1uNFoZAHBGtllmzznpCI3s” } ], “available_markets”:[ "CA", "MX", “我们” ], “光盘编号”:1, “duration_ms”:205680, “显式”:错误, “external_ids”:{ “isrc”:“USUM71511919” }, “外部网址”:{ "spotify": "https://open.spotify.com/track/4B0JvthVoAAuygILe3n4Bs" }, "href": "https://api.spotify.com/v1/tracks/4B0JvthVoAAuygILe3n4Bs", "id": "4B0JvthVoAAuygILe3n4Bs", "name": "你是什么意思?", “人气”:93, "preview_url": "https://p.scdn.co/mp3-preview/13da79dc4803f65092d583f6e3bdf1fc4d8344e5", “track_number”:3, “类型”:“轨道”, "uri": "spotify:track:4B0JvthVoAAuygILe3n4Bs" } },

在这些对象中的每一个旁边是另一个我试图分配给范围的对象。

所以这个 - 播放列表 {items [ {track {name: songname} } ] }

如何将 track.name 分配给范围?

谢谢!

【问题讨论】:

  • 请出示您的代码和预期结果
  • 请参阅上面的编辑。谢谢charlietfl。

标签: angularjs


【解决方案1】:

我不确定您是否只是拼写错误,但为什么要将空白数组分配给 data.items 而不是相反?

$scope.playListInfo = [];
$scope.getPlayList = function() {
  Spotify.getPlaylistTracks('spotify_canada', '7ndCD5pklOTcrTcv4DErmI')
    .then(function(data) {
        var i = 0;
        for(i; i < data.items.length; i++) {
           var dataToKeep = {};
           dataToKeep.name = data.items[i].track.name;
           dataToKeep.artist = data.items[i].track.artist;
           $scope.playListInfo[i] = dataToKeep;
        }
      });
   };

【讨论】:

  • Arg!是的,这更有意义。现在这似乎在迭代,但 playListTrack 看起来像一个空数组。播放列表: [空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空, null ] 当我输出到页面时。
  • 啊,一定是那里的管道中的编辑。你的建议奏效了。谢谢你!
  • 所以当我让你参与时,执行相同迭代但为新数组分配多个属性的最佳方法是什么?例如,使用 track.name 和 track.id 创建一个记录数组。我是一个数组菜鸟!
  • 我建议创建一个对象数组,并在 for 循环中分配您需要的值,就像您在上面所做的那样。所以 $scope.spotifyStuff = [] 替换了 playListTrack。然后在 for 循环中 var dataToKeep = {}。 dataToKeep.name = track.name; dataToKeep.artist = track.artist;等等等等; $scope.playListTrack[i] = dataToKeep;
  • 我更新了我的回复,以显示回复中使用了多个值。
【解决方案2】:

显然,我没有足够的评论点。所以,我正在创建这篇文章。

JSON 数据包含 items 而不是 item。另外,我认为您必须在函数之外创建一个 $scope.playlistTrack 数组。

$scope.playlistTrack = []; 
$scope.getPlayList = function () {
    Spotify.getPlaylistTracks('spotify_canada', '7ndCD5pklOTcrTcv4DErmI')
        .then(function (datas) {
            angular.forEach(datas, function(data){
                data.items = $scope.playlistTrack;
            });
        });
};

希望这个答案有帮助。

【讨论】:

  • 这给了我 TypeError: Cannot set property 'items' of null.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多