2011-10-09 36 views
0

我試圖讓Jquery閱讀一個json文件,如何通過Json和Jquery獲得比特幣加權價格?

但不幸的是我無法讓它工作。

這是我的json文件。看到:http://bitcoincharts.com/t/weighted_prices.json

{ 
    "USD": {"7d": "4.4549", "30d": "5.2016", "24h": "4.1373"}, 
    "GBP": {"7d": "2.9706", "30d": "3.2620", "24h": "2.5463"}, 
} 

我的jQuery腳本看起來像這樣

<script type="text/javascript"> 
(document).ready(function(){ 
     $.getJSON('http://bitcoincharts.com/t/weighted_prices.json',function(data){ 
       $("#results").html(data[0].30d); 
     }); 
}); 
</script> 

我試圖抓住USD> 30D>5.2016

回答

1

要獲得USD - > 30D(= 5.2016),你需要這樣做:

data["USD"]["30d"] 

你不能說因爲data[0]使用數字索引(一般)只適用於數組,並且您沒有數組。您有一個包含兩個屬性「USD」和「GBP」的對象,並且每個屬性都具有屬性「7D」,「30d」,「24h」的對象。

更詳細地:

的JavaScript 陣列字面聲明使用包含簡單元素的列表,這樣的方括號:

var myArray = ["a","b","c"]; 

但是對象字面聲明使用與主要波形括號類似於您在問題中提供的JSON中的值對,或者這是一個更簡單的示例:

var myObject = { "key1" : "value1", "key2" : "value2", "key3" : "value3" }; 

「技巧」是一旦定義數組和對象都用方括號表示法訪問,但數組使用數字索引,對象使用字符串鍵。

您也可以像使用點符號一樣使用點符號,但僅限於具有符合有效JavaScript標識符規則的鍵名稱的屬性,即不以數字開頭,不含空格,而不是保留字,等等。這些限制只適用於點符號,所以如果你使用方括號表示法,你可以有空格,數字等等。

嵌套數組和對象,包括混合這兩個,但在你的特定情況下你只是有一個包含另外兩個對象的對象,沒有數組。因爲data["USD"]會給你{"7d": "4.4549", "30d": "5.2016", "24h": "4.1373"}

data["GBP"]會給你{"7d": "2.9706", "30d": "3.2620", "24h": "2.5463"}

您可以用data["USD"]["30d"]將其縮小到所需的個人值。

編輯:由於Ajax同源策略,您的$.getJSON請求不起作用,即您只允許向當前頁面的相同域發出JSON請求。

你可以嘗試JSONP - 這jQuery的支持與您的部分幾乎沒有努力:你只需要添加?callback=?到URL的結束 - 除了JSONP需要在服務器上的支持,它看起來像比特幣的人不要不支持它。

因此,最簡單的方法是獲取您的服務器端代碼中的數據,其中同源策略不會妨礙您的使用。

+0

酷非常感謝您的詳細解釋;) 它工作本地(data.json)但如果我插入「http://bitcoincharts.com /t/weighted_prices.json「在$ .getJSON函數,然後它不工作:(看到這個:http://paste.ubuntu.com/722830/ – Voidcode

+0

看我的編輯。我認爲問題是,Ajax不' t跨域工作 – nnnnnn

+0

好的,謝謝你...! – Voidcode

0

我有一個很難找到的目前的參考,但問題是,您不能通過點符號訪問密鑰,您需要通過數組表示法來訪問它。在你的情況......

data[0]["30d"] 
+0

像這樣:http://paste.ubuntu.com/705506/不能真的得到它的工作;( – Voidcode

+0

是的,那樣。 – NT3RP

+0

嗯...它是否在您的計算機上工作,如果你將它保存在一個「.html」文件?我無法在瀏覽器中看到價格:( – Voidcode