我实际上有两个问题,两个都可能很简单,但由于一些奇怪的原因我无法弄明白......我之前也曾使用过JSON 100次!但这里是有问题的JSON:
{"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"
}
}
}
}
问题1:
当数字是随机的时候,如何遍历每个项目(69256)?例如第1项是123
,第2项是646
?例如,像普通的 JSON Feed会有类似的东西:
{'item':{'blah':'lorem'},'item':{'blah':'ipsum'}}
JS就像console.log(item.blah)
在循环中返回lorem
然后ipsum
当我不知道对象的第一项时,我该怎么做?
问题2:
如何从geoarray
对象中选择项目?我试过了:
json.test.item.geoarray.latitude
和
json.test.item.geoarray['latitude']
答案 0 :(得分:9)
问题1:如果数字是随机的,我如何遍历每个项目(69256)?
您可以使用for in
语句获取JS对象的属性名称:
for (var property in object) {
if (object.hasOwnProperty(property)) {
alert(property + '=' + object[property]);
}
}
要获得第一个JSON,您可以这样做:
var data;
for (var property in json) {
if (json.hasOwnProperty(property)) {
data = json[property];
break;
}
}
问题2:如何从地理阵列对象中选择项目?
geoarray
实际上是一个包含一个项目的数组。使用[0]
抓住它。
var latitude = data.item.geoarray[0].latitude;
如果它实际上包含多个项目,那么您需要使用带索引的简单for
语句或使用jQuery.each()
来循环它。
要了解有关JSON的更多信息,您可能会发现this tutorial很有用。
答案 1 :(得分:2)
您需要使用(稍微鲜为人知的)for...in
循环:
for (id in feed) {
if (feed.hasOwnProperty(id)) {
// do something with feed[id]
}
}
hasOwnProperty检查只是为了安全,以防万一到Object.prototype做了一些奇怪的事情。你可能不需要它。
顾名思义,geoarray确实是一个包含多个项目的数组。使用.geoarray[0].latitude
访问第一项等
答案 2 :(得分:1)
JSON属性的顺序是未定义的,因此没有第一项。一些实现保留了它们的定义顺序,但它不是你可以依赖的东西。