2014-10-09 2 views
2

Я пытаюсь использовать виджет JQuery UI автозаполнения с фидов JSON я получаю обратно из API, который отформатирован следующим образом:JQuery UI автозаполнения - доступ вложенных объектов в JSON

{ 

    "SearchTerm": "ches", 
    "HasDirectCountyHit": false, 
    "DirectCountyHitId": null, 
    "HasDirectLocationHit": false, 
    "DirectLocationHitId": null, 
    "Developments": [ 
     { 
      "Id": "45339ae3e55a", 
      "Label": "Chestnut Walk, Bilston", 
      "Url": "/developments/chestnut-walk-bilston" 
     }, 
     { 
      "Id": "4835f52e053a", 
      "Label": "Crown Park, Chester", 
      "Url": "/developments/crown-park-chester" 
     }, 
     { 
      "Id": "757964964cc6", 
      "Label": "The Birches, West Timperley", 
      "Url": "/developments/the-birches-west-timperley" 
     } 
    ], 
    "Counties": [ 
     { 
      "Id": "7", 
      "Label": "Cheshire", 
      "Url": "/search?cid=7" 
     }, 
     { 
      "Id": "24", 
      "Label": "Greater Manchester", 
      "Url": "/search?cid=24" 
     } 
    ], 
    "Locations": [ 
     { 
      "Id": "12061", 
      "Label": "Cheselbourne, Dorset (DT2 7)", 
      "Url": "/search?lid=12061" 
     }, 
     { 
      "Id": "12062", 
      "Label": "Chesham, Buckinghamshire (HP5 1)", 
      "Url": "/search?lid=12062" 
     }, 
     { 
      "Id": "12063", 
      "Label": "Chesham, Greater Manchester (BL9 6)", 
      "Url": "/search?lid=12063" 
     }, 
     { 
      "Id": "12064", 
      "Label": "Chesham Bois, Buckinghamshire (HP6 5)", 
      "Url": "/search?lid=12064" 
     }, 
     { 
      "Id": "12065", 
      "Label": "Cheshunt, Hertfordshire (EN8 9)", 
      "Url": "/search?lid=12065" 
     }, 
     { 
      "Id": "12066", 
      "Label": "Chesley, Kent (ME9 7)", 
      "Url": "/search?lid=12066" 
     }, 
     { 
      "Id": "12067", 
      "Label": "Cheslyn Hay, Staffordshire (WS6 7)", 
      "Url": "/search?lid=12067" 
     }, 
     { 
      "Id": "12068", 
      "Label": "Chessetts Wood, Warwickshire (B94 6)", 
      "Url": "/search?lid=12068" 
     }, 
     { 
      "Id": "12069", 
      "Label": "Chessington, Kingston upon Thames - Greater London (KT9 2)", 
      "Url": "/search?lid=12069" 
     }, 
     { 
      "Id": "12070", 
      "Label": "Chessmount, Buckinghamshire (HP5 1)", 
      "Url": "/search?lid=12070" 
     } 
    ] 

} 

API, который я вызываю, возвращает результаты на основе моего поискового запроса, поэтому я знаю, что все результаты в вложенных объектах совпадают - моя проблема заключается в доступе к этим объектам («События», «Уезды» и «Местоположения») так что виджет автозаполнения может получить значения «Label»?

Спасибо, Робин

+0

Я думаю, что вы можете обходить свойства (разработки, округа и местоположения) или использовать $ .merge для объединения всех записей в один, который будет создавать все новые массивы со всеми значениями метки, id и url, а затем назначить их как источник для автозаполнения. –

+0

Ваш вопрос хороший, что вы пробовали до сих пор? –

ответ

4

Ok - вот что вы можете сделать:

//put all the keys you want to pull out of your json in an array 
var props = [ 
    "Locations", "Counties", "Developments" 
]; 
//empty array for your autocomplete 
var labels = []; 

//loop thru all the properties you care about 
$.each(props, function() { 
    $.each(source[this], function() { 
     //and pull out all the labels and add them to the labels array 
     labels.push(this.Label) 
    }); 
}); 


$("#autocomplete").autocomplete({ 
    source: labels 
}); 

и увидеть все это в действии, я создал быструю скрипку http://jsfiddle.net/fr5yb3n0/

+0

Это прекрасно работает, огромное спасибо :-) – ParkerDigital

Смежные вопросы