Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 466
Oscar Godson Avatar asked Dec 18 '22 00:12

Oscar Godson


2 Answers

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.

like image 50
BalusC Avatar answered Mar 23 '23 01:03

BalusC


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.

like image 24
Matti Virkkunen Avatar answered Mar 22 '23 23:03

Matti Virkkunen