0

我收到以下我从源收到的对象 -

["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

应该如何迭代来获取它的值?

4

3 回答 3

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);
        }
    });
}
于 2012-07-06T17:19:30.467 回答
1

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

jQuery.map(data[1], function(item) {return item[0];});
// output: ["road", "roadtrip", "roadrunner", "roadster", ... ]

顺便说一句,对于那些说“这不是一个对象,它是一个数组”的人来说,数组是 JS 中的一种对象。

——斯科特

于 2012-07-06T17:46:39.523 回答
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/

于 2012-07-06T17:19:35.487 回答