4

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

2
  • for the record, cleaner code and less horizontal scrolling makes it easier for the people trying to help you... Commented May 13, 2010 at 4:19
  • Sorry, I just copy and pasted it from the feed. Thanks, ill do better next time! Commented May 13, 2010 at 8:05

3 Answers 3

9

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.

Sign up to request clarification or add additional context in comments.

1 Comment

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 :)
2

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.

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.