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.",
"autho开发者_运维问答r_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']
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.
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.
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.
精彩评论