JSON数组重新排列/或按子值的值过滤

时间:2011-10-11 21:21:41

标签: javascript jquery arrays json

我有点陷入从JSON数组中获取信息的问题。 我知道如何检索信息并解析它们。所以这不是问题。为了从Facebook获取信息,我们使用JQuery,这样做的工作很好。

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

在标签下,您会看到几个项目。我实际上需要重新排列整个事物以按标签排序。这意味着:

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

显然,正如您所看到的,顶级项目只有一个项目,但是一旦有更多图片,它就会增长。

这可能不是数组的正确形式,我对你的方法持开放态度。

谢谢

1 个答案:

答案 0 :(得分:1)

好的,所以只需迭代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
                } ;
            }
        }
    }
}

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