首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript/节点JSON解析问题

javascript/节点JSON解析问题
EN

Stack Overflow用户
提问于 2015-09-12 02:19:46
回答 2查看 69关注 0票数 0

下面是我的示例数据:http://api.setlist.fm/rest/0.1/setlist/4bf763f6.json

我只是在写一个节点应用程序来打印这个页面的细节。我关心的是背景,背景和歌曲。

代码语言:javascript
复制
var sets = setlist.sets
res.write(JSON.stringify(sets)) // THIS SHOWS THE CORRECT DATA
var numSets = Object.keys(sets).length;
for(var i = 0; i < numSets; i++){
    res.write("\nsets " + i);
    var set = sets.set[i];
    console.log(Object.getOwnPropertyNames(set))
    var numSet = Object.keys(set).length;
    res.write(JSON.stringify(set))
    for(var j = 0; j < numSet; j++){
        res.write("\nset " + (j+1) + " of " + numSet);
        var song = set.song;
        console.log(Object.getOwnPropertyNames(song))
        numSong = Object.keys(song).length;
        for(var k = 0; k < numSong; k++){
            res.write("\n song " + j + "-" + k);
            res.write("\n     "+JSON.stringify(song[k]["@name"]));
        }
    }
}

我得到的是:

代码语言:javascript
复制
set 1 of 1
 song 0-0
     "Lift Me Up"
 song 0-1
     "Hard to See"
 song 0-2
     "Never Enough"
 song 0-3
     "Got Your Six"
 song 0-4
     "Bad Company"
 song 0-5
     "Jekyll and Hyde"
 song 0-6
     "Drum Solo"
 song 0-7
     "Burn MF"
 song 0-8
     "Wrong Side of Heaven"
 song 0-9
     "Battle Born"
 song 0-10
     "Coming Down"
 song 0-11
     "Here to Die"

在集合中有两个歌曲元素:(抱歉,没有代码块,否则它不会包装)

代码语言:javascript
复制
{
    "set": [{
        "song": [{
            "@name": "Lift Me Up"
        }, {
            "@name": "Hard to See"
        }, {
            "@name": "Never Enough"
        }, {
            "@name": "Got Your Six"
        }, {
            "@name": "Bad Company",
            "cover": {
                "@disambiguation": "British blues-rock supergroup",
                "@mbid": "0053dbd9-bfbc-4e38-9f08-66a27d914c38",
                "@name": "Bad Company",
                "@sortName": "Bad Company",
                "@tmid": "734487",
                "url": "http://www.setlist.fm/setlists/bad-company-3bd6b8b0.html"
            }
        }, {
            "@name": "Jekyll and Hyde"
        }, {
            "@name": "Drum Solo"
        }, {
            "@name": "Burn MF"
        }, {
            "@name": "Wrong Side of Heaven",
            "info": "Acoustic"
        }, {
            "@name": "Battle Born",
            "info": "Acoustic and Electric"
        }, {
            "@name": "Coming Down"
        }, {
            "@name": "Here to Die"
        }]
    }, {
        "@encore": "1",
        "song": [{
            "@name": "Under and Over It"
        }, {
            "@name": "Burn It Down"
        }, {
            "@name": "The Bleeding"
        }]
    }]
}

在斯威夫特,我只是制作了一本字典,它工作得很好。Javascript不是我的强项。为什么我不能得到第二首歌的元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-12 03:12:51

setlist.set是一个由两个对象组成的数组,一个包含“正则”(?)歌曲和其他包含安可信息的歌曲。

看起来,您将循环变量与其他对象/数组混合在一起,而不是迭代您认为正在迭代的对象/数组。

下面是一个简化的版本,可以显示您期望的内容:

代码语言:javascript
复制
// `sets` is an object containing (at least) `set` and `url` properties
var sets = setlist.sets;

// `set` is an array containing (in your example, two) objects
var set = sets.set;

for (var i = 0; i < set.length; ++i) {
  console.log('Set %d/%d', i+1, set.length);

  // `curSet` is an object containing a `song` property
  var curSet = set[i];

  // `songs` is an array of objects
  var songs = curSet.song;

  for (var j = 0; j < songs.length; ++j) {
    // `song` is an object containing properties like `@name` and possibly others
    var song = songs[j];

    console.log(' - Song: %s', song['@name']);
  }
}
票数 2
EN

Stack Overflow用户

发布于 2015-09-12 03:09:59

线

var numSets = Object.keys(sets).length;

应该是

var numSets = sets.set.length;

我还建议您使用forEach循环而不是for循环( .map()更好)。for循环比其他循环更容易出现bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32534511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档