1

可能重复:
我有一个嵌套的数据结构/JSON,我怎样才能访问一个特定的值?

我有一个代表鸟类列表的 JSON。每只鸟都是 JSON 中的一个对象。在每个对象中都有表示位置的字段。这些位置按字母数字编码,如 ['P1UBA'、'P1UBC' 等]。这些字段中的值 1 表示存在,而 0 表示不存在。

下面的代码显示了其中一个对象(整个 JSON 中有 150 个)。

[
    {
    "Species": "AMAV",
    "Common Name": "AMERICAN AVOCET",
    "Order": "Shorebirds",
    "Family": "Avocets",
    "P1UBA": "0",
    "P1UBC": "1",
    "P1UBF": "0",
    "P1UBG": "0",
    "P1ABA": "0",
    "P1ABC": "0",
    "P1ABF": "1",
    "P1ABFb": "0",
    "P1ABG": "0",
    "P1USA": "0",
    "P1USC": "0",
    }
]

我如何搜索这个对象并返回位置字段==1?理想情况下,我会创建一个新数组,它是这些字段的字符串==1

使用上面的对象会产生一个新的字符串

var birdsMatch=['P1UBC','P1ABF']

我想使用 jquery,但如果它更有效,我对纯 JavaScript 解决方案持开放态度

4

4 回答 4

1

鉴于每个鸟对象都在一个名为 Birds 的数组中,下面将起作用。

$(data.Birds).each(function(index, element){
    if(element.value == '1')
        alert("FOUND BIRDS IN " + element.name);
})
于 2013-01-23T19:46:06.693 回答
1
var attr, result_arr = [];

for (attr in birdObj){
    if (birdObj[attr] === "1"){
        result_arr.push(attr);
    }
}

BirdObj 与您在上面给出的 obj 示例类似。

于 2013-01-23T19:47:34.387 回答
1

您必须遍历所有鸟类,然后通过每只鸟的所有属性来收集位置(假设 varbirds包含您解析的 JSON):

var birdsMatch = {};
for(var i=0; i<birds.length; i++) {
    // Create an empty array to keep locations found for each species
    birdsMatch[birds[i].Species] = []; 
    for(var loc in birds[i]) {
        if(birds[i][loc] === 1) {
            // Found! Add location to the correct species array
            birdsMatch[birds[i].Species].push(loc);
        }
    }
}

最后,birdsMatch对象将如下所示:

{
    AMAV : ['P1UBC','P1ABF'],
    OTHER_SPECIES : [], // not found in any locations
    YET_ANOTHER : ['LOC1']
    // ...
}
于 2013-01-23T19:49:46.990 回答
1

使用jQuery.map

var birds = $.map(birdObj, function(value, key) { 
  return value === '1' ? key : null; 
});

//birds => ["P1UBC", "P1ABF"]
于 2013-01-23T19:54:58.687 回答