2011-10-09 71 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