Как выбрать первое свойство с неизвестным именем и первым элементом из массива в JSON - PullRequest
4 голосов
/ 13 мая 2010

У меня на самом деле два вопроса, оба, вероятно, просты, но по какой-то странной причине я не могу понять ... Я работал с JSON сотни раз и раньше! но вот вопрос JSON:

{"69256":{
   "streaminfo":{
     "stream_ID":"1025",
     "sourceowner_ID":"2",
     "sourceowner_avatar":"http:\/\/content.nozzlmedia.com\/images\/sourceowner_avatar2.jpg",
     "sourceownertype_ID":"1",
     "stream_name":"Twitter",
     "streamtype":"Social media"
     "appsarray":[]
   },
   "item":{
      "headline":"Charboy",
      "main_image":"http:\/\/content.nozzlmedia.com\/images\/author_avatar173212.jpg",
      "summary":"ate a tomato and avocado for dinner...",
      "nozzl_captured":"2010-05-12 23:02:12",
      "geoarray":[{
         "state":"OR",
         "county":"Multnomah",
         "city":"Portland",
         "neighborhood":"Downtown",
         "zip":"97205",
         "street":"462 SW 11th Ave",
         "latitude":"45.5219",
         "longitude":"-122.682"
       }],
       "full_content":"ate a tomato and avocado for dinner tonight. 
                      such tasty foods. just enjoyable.",
       "body_text":"ate a tomato and avocado for dinner tonight. 
                      such tasty foods. just enjoyable.",
       "author_name":"Charboy",
       "author_avatar":"http:\/\/content.nozzlmedia.com\/images\/author_avatar173212.jpg",
       "fulltext_url":"http:\/\/twitter.com\/charboy\/statuses\/13889868936",
       "leftovers":{
           "twitter_id":"tag:search.twitter.com,2005:13889868936",
           "date":"2010-05-13T02:59:59Z",
           "location":"iPhone: 45.521866,-122.682262"
       },
       "wordarray":{
          "0":"ate",
          "1":"tomato",
          "2":"avocado",
          "3":"dinner",
          "4":"tonight",
          "5":"tasty",
          "6":"foods",
          "7":"just",
          "8":"enjoyable",
          "9":"Charboy",
          "11":"Twitter",
          "13":"state:OR",
          "14":"county:Multnomah, OR",
          "15":"city:Portland, OR",
          "16":"neighborhood:Downtown",
          "17":"zip:97205"
      }
   }
 }
}

Вопрос 1: Как мне пройти через каждый элемент (69256), когда число является случайным? например элемент 1 - 123, элемент2 - 646? Как, например, обычный фид JSON будет иметь что-то вроде:

{'item':{'blah':'lorem'},'item':{'blah':'ipsum'}}

JS будет похоже на console.log(item.blah), чтобы вернуть lorem затем ipsum в цикле

Как мне это сделать, когда я не знаю первый предмет объекта?

Вопрос 2: Как выбрать элементы из объекта geoarray? Я старался: json.test.item.geoarray.latitude

и

json.test.item.geoarray['latitude']

Ответы [ 3 ]

9 голосов
/ 13 мая 2010

Вопрос 1: Как пройти через каждый элемент (69256), когда число является случайным?

Имена свойств объекта JS можно получить с помощью оператора for in:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        alert(property + '=' + object[property]);
    }
}

Чтобы получить первый JSON, вы можете сделать:

var data;
for (var property in json) {
    if (json.hasOwnProperty(property)) {
        data = json[property];
        break;
    }
}

Вопрос 2: Как выбрать элементы из объекта георасположения?

geoarray на самом деле массив с одним элементом. Используйте [0], чтобы взять его.

var latitude = data.item.geoarray[0].latitude;

Если в действительности он содержит несколько элементов, вам нужно будет зациклить его, используя простой оператор for с индексом или jQuery.each().


Чтобы узнать больше о JSON, вы можете найти этот урок полезным.

2 голосов
/ 13 мая 2010

Вам нужно будет использовать (несколько менее известный) цикл for...in:

for (id in feed) {
    if (feed.hasOwnProperty(id)) {
        // do something with feed[id]
    }
}

Проверка hasOwnProperty предназначена только для обеспечения безопасности на случай, если с Object.prototype что-то сделано странно Вам это может не понадобиться.

Как следует из названия, географический массив действительно является массивом, который содержит несколько элементов. Используйте .geoarray[0].latitude для доступа к первому элементу и т. Д.

1 голос
/ 13 мая 2010

Порядок свойств JSON не определен, поэтому первый элемент отсутствует. Некоторые реализации сохраняют порядок, в котором они определены, но это не то, на что вы можете рассчитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...