Oscar Godson
Oscar Godson

Reputation: 32716

How to select the first property with unknown name and first item from array in JSON

I actually have two questions, both are probably simple, but for some odd reason I cant figure it out... I've worked with JSON 100s of times before too! but here is the JSON in question:

{"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"
      }
   }
 }
}

Question 1: How do I loop through each item (69256) when the number is random? e.g. item 1 is 123, item2 is 646? Like, for example, a normal JSON feed would have something like:

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

the JS would be like console.log(item.blah) to return lorem then ipsum in a loop

How do I do it when i dont know the first item of the object?

Question 2: How do I select items from the geoarray object? I tried: json.test.item.geoarray.latitude

and

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

Upvotes: 4

Views: 6898

Answers (3)

mikerobi
mikerobi

Reputation: 20878

The order of JSON properties is undefined, so there is no first item. Some implementations retain the order in which they are defined, but it not something you can count on.

Upvotes: 1

BalusC
BalusC

Reputation: 1108632

Question 1: How do I loop through each item (69256) when the number is random?

You can get property names of a JS object using the for in statement:

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

To get the first one of the JSON, you could do:

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

Question 2: How do I select items from the geoarray object?

The geoarray is actually an array with one item. Use [0] to grab it.

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

If it in real contains multiple items, then you'll need to loop over it using a simple for statement with an index or using jQuery.each().


To learn more about JSON, you may find this tutorial useful.

Upvotes: 9

Matti Virkkunen
Matti Virkkunen

Reputation: 65126

You'll need to use the (somewhat lesser known) for...in loop:

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

The hasOwnProperty check is just for safety, in case something's done weird things to Object.prototype. You might not need it.

As the name says, the geoarray is indeed an array, which contains multiple items. Use .geoarray[0].latitude to access the first item, etc.

Upvotes: 2

Related Questions