views:

128

answers:

3

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']

+1  A: 

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.

Matti Virkkunen
+1  A: 

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.

BalusC
worked great thanks. And no, the feed is kind of... icky. It only has 1 item in the array. Wish it were cleaner like Flickr, Twitter, etc :)
Oscar Godson
A: 

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.

mikerobi