如何在JSON中选择具有未知名称的第一个属性和数组中的第一个项目

时间:2010-05-13 03:45:06

标签: javascript jquery arrays json

我实际上有两个问题,两个都可能很简单,但由于一些奇怪的原因我无法弄明白......我之前也曾使用过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']

3 个答案:

答案 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属性的顺序是未定义的,因此没有第一项。一些实现保留了它们的定义顺序,但它不是你可以依赖的东西。