2015-03-09 4 views
2

Мне тяжело пытаться получить данные из этого массива. Может кто-нибудь, пожалуйста, скажите мне, как это сделать?Как перемещаться по массиву/объекту javascript

Мне нужно получить latLng и AdminArea4 изнутри locations для автозаполнения.

Может кто-нибудь объяснить разницу между {} и []. Из того, что я знаю, это массив, а другой объект, но я не уверен, правильно ли это. Является ли процесс отличным от перемещения массива, чем объекта?

{ 
    "results": [ 
     { 
     "locations": [ 
      { 
       "latLng": { 
        "lng": 24.873108, 
        "lat": 59.389755 
       }, 
       "adminArea4": "Harju maakond", 
       "adminArea5Type": "City", 
       "adminArea4Type": "County", 
       "adminArea5": "Rae vald", 
       "street": "", 
       "adminArea1": "EE", 
       "adminArea3": "", 
       "type": "s", 
       "displayLatLng": { 
        "lng": 24.873108, 
        "lat": 59.389755 
       }, 
       "linkId": 0, 
       "postalCode": "", 
       "sideOfStreet": "N", 
       "dragPoint": false, 
       "adminArea1Type": "Country", 
       "geocodeQuality": "CITY", 
       "geocodeQualityCode": "A5XXX", 
       "adminArea3Type": "State" 
      }, 
      { 
       "latLng": { 
        "lng": 24.860184, 
        "lat": 59.38493 
       }, 
       "adminArea4": "Harju maakond", 
       "adminArea5Type": "City", 
       "adminArea4Type": "County", 
       "adminArea5": "Rae", 
       "street": "", 
       "adminArea1": "EE", 
       "adminArea3": "", 
       "type": "s", 
       "displayLatLng": { 
        "lng": 24.860184, 
        "lat": 59.38493 
       }, 
       "linkId": 0, 
       "postalCode": "", 
       "sideOfStreet": "N", 
       "dragPoint": false, 
       "adminArea1Type": "Country", 
       "geocodeQuality": "CITY", 
       "geocodeQualityCode": "A5XXX", 
       "adminArea3Type": "State" 
      }, 
     ] 
     } 
    ] 
} 
+1

Еще один «Как разобрать объект JSON с JavaScript» ... вздох. – Raptor

+1

Возможный дубликат [Как разобрать JSON в JavaScript, чтобы получить значение] (http://stackoverflow.com/questions/4448192/how-to-parse-json-in-javascript-to-take-value) – Raptor

+0

Является ли это массив или объект? Я действительно хочу узнать больше о том, как разобрать это. – NaN

ответ

2

Сначала некоторые пояснения о массивах и объектах, так как вы просили, и это весьма актуально, как использовать структуру данных, у вас есть:

{} определяет объект. [] определяет массив.

Объект является неупорядоченным списком пар свойств/значений без повторения имени свойства.

Массив - это упорядоченный список отдельных элементов с свойством .length, который сообщает вам, сколько элементов находится в массиве.


Объект будет определяться следующим образом:

var obj = { 
    prop1: value1, 
    prop2: value2 
}; 

И, вы можете ссылаться на значения, как это:

console.log(obj.prop1); // value1 

Массив определяется следующим образом:

var myArray = ["one", "two", "three"]; 

И вы можете получить доступ элементы на нулевой основе индекса, как это:

console.log(myArray[0]); // "one" 

Или, вы можете перебора всех элементов в массиве, как это:

for (var i = 0; i < myArray.length; i++) { 
    console.log(myArray[i]); 
} 

Если предположить, что общая структура данных в переменной с именем data, вы можете перебирать результаты и вложенные массивы мест, как это:

var results = data.results; 
var locations; 
for (var j = 0; j < results.length; j++) { 
    locations = results[j].locations; 
    for (var i = 0; i < locations.length; i++) { 
     console.log(locations[i].latLng); 
     console.log(locations[i].adminArea4); 
    } 

Для expla in:

  1. data.results - массив, необходимый для повторения.
  2. В каждом элементе этого массива находится объект с свойством location.
  3. Свойство местоположений - это еще один массив, который вам нужно повторить.
  4. В каждом элементе местоположения массив представляет собой объект с свойством latLng и свойством adminArea4.
+0

Спасибо за помощь. Я пробовал ваш цикл и то, что я получаю, это 'TypeError: results [i] undefined' – NaN

+0

@NaN - да, это была опечатка в моем ответе. 'results [i]' должно быть 'results [j]'. Ответ исправлен. – jfriend00

+0

Благодарим за редактирование. Кажется, мне сейчас дают больше. Если бы я хотел получить доступ к фактическому значению lat, могу ли я просто выполнить 'location [i] .latLng.lat'? Кроме того, можете ли вы сказать мне, нужен ли мне цикл for, если бы я использовал функцию parseJSON? – NaN

1

Это структура .. JSON Вы можете получить доступ к элементам, как я уже говорил ниже .. Назначают JSON к переменной, а затем свойства объекта доступа.

var obj = { 
    "results": [ 
     { 
     "locations": [ 
      { 
       "latLng": { 
        "lng": 24.873108, 
        "lat": 59.389755 
       }, 
       "adminArea4": "Harju maakond", 
       "adminArea5Type": "City", 
       "adminArea4Type": "County", 
       "adminArea5": "Rae vald", 
       "street": "", 
       "adminArea1": "EE", 
       "adminArea3": "", 
       "type": "s", 
       "displayLatLng": { 
        "lng": 24.873108, 
        "lat": 59.389755 
       }, 
       "linkId": 0, 
       "postalCode": "", 
       "sideOfStreet": "N", 
       "dragPoint": false, 
       "adminArea1Type": "Country", 
       "geocodeQuality": "CITY", 
       "geocodeQualityCode": "A5XXX", 
       "adminArea3Type": "State" 
      }, 
      { 
       "latLng": { 
        "lng": 24.860184, 
        "lat": 59.38493 
       }, 
       "adminArea4": "Harju maakond", 
       "adminArea5Type": "City", 
       "adminArea4Type": "County", 
       "adminArea5": "Rae", 
       "street": "", 
       "adminArea1": "EE", 
       "adminArea3": "", 
       "type": "s", 
       "displayLatLng": { 
        "lng": 24.860184, 
        "lat": 59.38493 
       }, 
       "linkId": 0, 
       "postalCode": "", 
       "sideOfStreet": "N", 
       "dragPoint": false, 
       "adminArea1Type": "Country", 
       "geocodeQuality": "CITY", 
       "geocodeQualityCode": "A5XXX", 
       "adminArea3Type": "State" 
      }, 
     ] 
     } 
    ] 
}; 

Travsering Values

obj.results[0].locations[0].latLng.lng 
obj.results[0].locations[0].latLng.lat 

Вы также можете пройти с помощью для цикла.

+0

Спасибо, разохассанк. Мои данные возвращаются с сервера, поэтому я могу назначить то, что возвращается с сервера на переменную? – NaN

+0

лучше разобрать его, используя jquery. var obj = $ .parseJSON (serverResponse); – razahassank

+0

В массиве местоположений имеется более одного места и потенциально более одного результата в массиве 'results'. Это позволяет получить только одно проводное местоположение - пропустить любые другие присутствующие. – jfriend00

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