2011-10-11 41 views
1

我有点卡住从JSON数组中获取信息的问题。 我知道如何检索信息并解析它们。所以这不是问题。为了从Facebook获得信息,我们使用了JQuery,它的工作很好。JSON数组重新排列/或按值subvalue过滤

基本上,我需要的是重组以下链接的JSON输出:https://graph.facebook.com/284521968232566/photos

在标签,你会看到几个项目。我实际上需要重新整理所有东西,以便按标签排序。这意味着:

Pauke { [name, source, link], [name, source, link] } 
Trompete { [name, source, link], [name, source, link] } 

很明显,你可以看到,在顶级项目只有一个项目,但只要有更多的图片,它会成长。

这可能不是数组的正确形式,我愿意接受你的方法。

谢谢

+0

你只需要重新排列的标签对象或整个json修改? – Andy

+0

我需要它由标签结构。给你一些背景:JSON数据是来自乐队脸书上的相册的输出。在每张照片中,你都会看到一名乐队成员,根据他们演奏的乐器进行标记。因此,可能会有人演奏多于一个,这会导致多个标签。因此,乐队成员因此需要在网页上的多个部分出现。 – phbs

回答

1

OK,所以只是遍历data,然后在data[i].tags.data,建设一个结果数组,财产以后这样的:

var json = {} ; // The json data - this needs to be pre-populated 
var result = [] ; // Result Array 
var tag ; // Temporary variable for each tag in turn. 

for(var i=0;i<json.data.length;i++) { 
    if( typeof json.data[i].tags != 'undefined' 
     && typeof json.data[i].tags.data != 'undefined' 
    ) { 
     for(var j=0;j<json.data[i].tags.data.length;j++) { 
      tag = json.data[i].tags.data[j] ; 
      if(typeof(tag.name != 'undefined') { 
       if(typeof result[tag.name] == 'undefined') result[tag.name] = [] ; 
       result[tag.name][result[tag.name].length] = { 
        'name' : tag.name, 
        'source' : json.data[i].source, 
        'link' : json.data[i].link 
       } ; 
      } 
     } 
    } 
} 

这将产生一个数组(标签),每个是一个数组(图像),其中一个对象包含具有该标记名称的每个图像的信息。