当keyname未知时,无法访问JSON中的元素

时间:2013-01-06 17:38:14

标签: javascript json

我正在尝试从Github API获取的数据中检索Github上的gists文件名。我正在使用javascript访问数据。

可以在此处找到示例结果:https://api.github.com/users/blaercom/gists。我还复制了以下数据的缩短版本。

{
  ...
  id: "4468273",
  files: {
    firstpost.md: {
      type: "text/plain",
      filename: "firstpost.md",
      size: 16,
      language: "Markdown"
    }
  }
  ...
}

我一直在尝试很多东西,但我似乎无法访问文件名。这是因为'files'对象不是列表,而是键值对,其中键标识符与文件名本身匹配。

我尝试过的事情包括

filename = files[0]['filename']
filename = files[0].filename
filename = files['filename']

坦率地说,唯一有效的方法是filename = files['firstpost.md']['filename']的变体,但这是无效的,因为我事先无法知道文件名。

我确信可以访问文件名,但是已经花了很长时间测试不同的方法。帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

您可以使用for (var key in object) {},以下是使用api call中数据的示例:

var filenames = [];

for (var filename in data[0].files) {
   filenames.push(filename);
}

console.log(filenames); // ["firstpost.md"]

答案 1 :(得分:1)

以下是使用json回复

的真实示例
var obj='your json data';
var fileNames=[];
for(var i in obj[0]['files'])
{
    var fileName=obj[0]['files'][i]['filename'];
    fileNames.push(fileName);
}
document.write(fileNames[0]); // firstpost.md

Example

<强>更新

Another example使用jsonp/script

<script src="https://api.github.com/users/blaercom/gists?callback=myCallback"></script>

回调函数

function myCallback(o)
{
    var obj=o.data;
    var fileNames=[];
    for(var i in obj[0]['files'])
    {
        var fileName=obj[0]['files'][i]['filename'];
        fileNames.push(fileName);
    }
    document.write(fileNames[0]);  // firstpost.md
}