重新格式化JSON对象

时间:2013-06-11 13:13:31

标签: jquery arrays json

我有一个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()来填充输入,但我认为这是我的下一步。

有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分: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 demo

答案 1 :(得分:0)

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

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

你看,你希望myObject成为一个json对象,如你所描述的那样,一个'key'被称为'destinations',它是一个数组。从一个空数组开始,然后设置它的索引。