2012-03-10 18 views
2

可能重複:
Selecting a JSON object with a colon in the key如何使用jQuery訪問這些奇怪的JSON項目?

我道歉,如果這是一個重複的問題。我搜查了,我真的做到了!

我想要實現的是一個簡單的日期重新格式化爲「2012年3月9日星期五」之類的更好的東西。我很樂意使用衆多方便的jQuery插件之一來解析可用的「pubDate」值,使其更有用。不幸的是,有些力量阻止我導入任何其他腳本,包括jQuery UI。由我的上級授權的頁面模板導入jQuery,就是這樣。

我的JSON數據包含下面的代碼片段:

"items": [ 
      { 
       "title": "blah blah", 
       "link": "http://url.blah.com", 
       "category": "category blah", 
       "pubDate": "Fri, 09 Mar 2012 16:16:05 -0500", 
       "y:published": { 
        "hour": "21", 
        "timezone": "UTC", 
        "second": "5", 
        "month": "3", 
        "month_name": "March", 
        "minute": "16", 
        "utime": "1331327765", 
        "day": "9", 
        "day_ordinal_suffix": "th", 
        "day_of_week": "5", 
        "day_name": "Friday", 
        "year": "2012" 
       }, 
       "y:id": { 
        "permalink": "true", 
        "value": null 
       }, 
       "y:title": "blah blah", 
       "description": "more blah blah" 
      } 

如果我遍歷「項目」使用$。每次,我怎麼檢索「Y:出版了」東西的價值?

顯然像

items.y:published.day_name 

不會因爲結腸的工作。唉,我不是這個內容的創建者(它實際上是來自雅虎管道的JSON提要,這可能會解釋「y:」);我只是負責操縱它。從我讀過的內容來看,「y:blahblah」條目是非標準的JSON(?),並且很可能沒有通過.getJSON解析,在這種情況下,我搞砸了。 (子問題:這個評估是否正確?)

(並且就這樣我覆蓋了我所有的基礎:將Yahoo管道輸出從JSON更改爲RSS/XML,完全消除了「y:published」節點,所以不是一個選項)。

在此先感謝。我沒有驕傲;即使最簡單的解決方案,只要可以用直接的js或jQuery來完成,我也會很感激。

更新:以創紀錄的時間回答!感謝所有貢獻的人。

解決辦法:

var niceDate = 
singleItem['y:published'].day_name + ', ' + 
singleItem['y:published'].month_name + ' ' + 
singleItem['y:published'].day + ', ' + 
singleItem['y:published'].year; 
+0

你見過? http://stackoverflow.com/questions/4925760/selecting-a-json-object-with-a-colon-in-the-key – redDevil 2012-03-10 07:08:34

+0

FUDGE!不,我沒有看到。非常感謝。 *目前拍我的額頭* – 2012-03-10 07:15:31

+0

雙謝。實際上,我曾經在DOM操作中使用過這種符號。我猜我自己確信JSON遍歷有一套內在不同的規則。或者其他的東西。我不知道爲什麼。已經很晚了...... – 2012-03-10 07:17:27

回答

1

items是一個數組,因此要獲取第一個項目,請使用items[0]

然後訪問性能上具有無效的標識符名稱該項目,你可以用括號標記,所以:

console.log(items[0]["y:published"].hour); // 21 

在JavaScript中,您可以通過兩種方式訪問​​對象屬性:用點符號和字面值(例如,foo.bar),或帶括號的符號和字符串(foo["bar"])。這兩者完全可以互換,但對於字符串形式,屬性名稱不必符合JavaScript標識符文字的規則。

4

object["prop"]相當於object.prop,不同之處在於前者不侷限於有效的JavaScript標識符。 (JavaScript中的所有屬性名稱在內部都是真正的字符串,後一種形式只是爲了方便,但如前所述,並不總是有效。)

快樂編碼。