迭代JSON对象以获取自动完成建议

时间:2012-07-06 17:13:33

标签: javascript jquery json autocomplete jquery-autocomplete

我从源代码收到以下对象 -

["road",[["road",53,"0E"],["roadtrip",53,"1E"],["roadrunner",53,"2E"],["roadster",53,"3E"],["roadside",53,"4E"],["roadrage",53,"5E"],["roadcycling",53,"6E"],["roadsideamerica",53,"7E"]],{"k":1,"q":"lpxvQlflqTsJ-2_PMBLImSpu1PU"}]

我想从对象中获取的值:

road, roadtrip, roadrunner, roadster and so on.

这是代码

    $('#query').autocomplete({
        source: function( request, response ) {
        $.ajax({
        type: "GET",
        url: , // url for the source
        dataType: "json",
        data: { 
            "tags" : request.term
        },
        success: function( data ) {
            related = data[1];
            response(data[1][0]);
        }
        });
    }

但我只得到对象的第一个数组的值? 例如。 road OE

如何迭代才能获取它的值?

3 个答案:

答案 0 :(得分:1)

这是一个不是对象的数组,如果你JSONLint它:

[
    "road",
    [
        [
            "road",
            53,
            "0E"
        ],
        [
            "roadtrip",
            53,
            "1E"
        ],
        [
            "roadrunner",
            53,
            "2E"
        ],
        [
            "roadster",
            53,
            "3E"
        ],
        [
            "roadside",
            53,
            "4E"
        ],
        [
            "roadrage",
            53,
            "5E"
        ],
        [
            "roadcycling",
            53,
            "6E"
        ],
        [
            "roadsideamerica",
            53,
            "7E"
        ]
    ],
    {
        "k": 1,
        "q": "lpxvQlflqTsJ-2_PMBLImSpu1PU"
    }
]

你可以看到第一个键是字符串“road”,第二个键是数组,最后一个是对象。

您要查找的项目是主阵列第二个键中数组的第一个键。

尝试类似:

$('#query').autocomplete({
    source: function( request, response ) {
    $.ajax({
    type: "GET",
        url: , // url for the source
        dataType: "json",
        data: { 
            "tags" : request.term
        },
        success: function( data ) {
            var terms = [];

            for (var i=0; i < data[1].length; i++) {
                terms.push(data[1][i][0]);
            }

            respond(terms);
        }
    });
}

答案 1 :(得分:1)

这应该为您提供您正在寻找的所有元素。你如何迭代它们取决于你:

jQuery.map(data[1], function(item) {return item[0];});
// output: ["road", "roadtrip", "roadrunner", "roadster", ... ]
对于那些说“它不是一个对象,它是一个数组”的人来说,一个数组是JS中的一种对象。

- 斯科特

答案 2 :(得分:0)

提供的数据不是对象。你有一个数组,用括号'[..]'表示。此外,对象具有属性和值,即{ "road": 53 }

假设你有一个正确形成的对象,那么你可以在jQuery中使用$.getJSON()函数。

然后,您可以遍历有效对象并相应地访问所需的属性。

<强> HTML

<div></div>

<强> jQuery的:

var obj = {     
    "road": [
        {
            "name": "roadtrip"
        },
        {
            "name": "roadrunner"
        }
    ]
};

var data = obj.road;

for(var i=0; i < data.length; i++){
    $('div').append(data[i].name + '<br>');
}

演示:http://jsfiddle.net/6S6DJ/