1

我有一个我想重新格式化的 JSON 对象,这就是我的意思......

JSON对象...

{
"query":"de mar",
"suggestions":[
    "Any Location",
    "Camp De Mar, Majorca, SPAIN",
    "L'amettla De Mar, Costa Dorada, SPAIN",
    "Lloret De Mar, Costa Brava, SPAIN",
    "Malgrat De Mar, Costa Brava, SPAIN",
    "Pineda De Mar, Costa Brava, SPAIN",
    "Roquetas De Mar, Costa De Almeria, SPAIN",
    "Tossa De Mar, Costa Brava, SPAIN"
],
"data":[
    "",
    "DestinationResort|Camp De Mar",
    "DestinationResort|L'Amettla De Mar",
    "DestinationResort|Lloret De Mar",
    "DestinationResort|Malgrat De Mar",
    "DestinationResort|Pineda De Mar",
    "DestinationResort|Roquetas De Mar",
    "DestinationResort|Tossa De Mar"
]
}

我想把它变成以下......

{
"destinations": [
    "": "Any Location",
    "DestinationResort|Camp De Mar": "Camp De Mar, Majorca, SPAIN",
    // etc etc
]
}

目前我有以下(可怜地使用jquery编码)......

$("#search").on("input", function() {
  $.getJSON( "http://holidays.allinclusive.co.uk/external/destinations.ashx?query=" + $("#search").val() )
  .done(function(data) {
    var myObject = ['destinations'];
    $.each(data.suggestions, function (index, elem) {
      myObject['destinations'] = {[data.data[index]] : [elem] };
    });
  })
});

我真正想做的是将它与 autocomplete() 或 bootstrap 的 typeahead() 一起使用来填充输入,但我认为这是我的下一步。

请问有人可以帮我吗?

谢谢

4

2 回答 2

4

您已经很接近了,但是在创建新对象时存在一些问题。

var myObject = ['destinations'];

这将创建一个包含单个元素的数组,即字符串“destinations”。您真正想要的是一个destinations具有空数组属性的对象,因此将其更改为:

var myObject = {
    destinations: []
};

迭代是正确的.each(),但每次迭代的代码都不正确。您的代码正在做的是获取您的数组myObject,并将其destinations属性(在第一次迭代中不存在)设置为等于当前迭代的对象;相反,您希望将新对象推送到数组中。对象的创建也存在问题,因为在创建对象字面量时不能使用动态键。

$.each(data.suggestions, function (index, elem) {
    var currentObject = {}
    currentObject[data.data[index]] = elem;
    myObject.destinations.push(currentObject);
});

jsFiddle 演示

于 2013-06-11T13:22:08.057 回答
0

不错的开始!你只需要稍微重新安排一下。

var myObject = {'destinations': []};
$.each(data.suggestions, function (index, elem) {
  myObject.destinations[data.data[index]] = elem;
});

您会看到,您希望 myObject 成为一个 json 对象,正如您使用一个称为“destinations”的“键”描述的那样,它是一个数组。从一个空数组开始,然后设置它的索引。

于 2013-06-11T13:23:14.633 回答