Как получить взвешенные цены в биткойнах через Json и Jquery? - PullRequest
0 голосов
/ 10 октября 2011

Я пытаюсь заставить Jquery прочитать файл json,

Но, к сожалению, я не могу заставить его работать.

Это мой файл 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

Ответы [ 2 ]

1 голос
/ 30 октября 2011

Чтобы получить USD -> 30d (= 5.2016), вам нужно сделать следующее:

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

Вы не можете сказать data[0], потому что использование числового индекса (как правило) применимо только к массивам иу вас нет массива.У вас есть объект с двумя свойствами, «USD» и «GBP», и у каждого из этих свойств есть объект со свойствами «7D», «30d», «24h».

Более подробно:

JavaScript массив литеральные объявления используют квадратные скобки, которые содержат просто список элементов, например:

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

Но object литеральные объявления используют фигурныескобки с парами ключ-значение, как в 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"].

РЕДАКТИРОВАТЬ: Ваш запрос $.getJSON не будет работать из-за политики Ajax с тем же происхождением, т. Е. Вам разрешено только делать запросы JSON в тот же домен, что и текущая страница.

Вы можете попробовать JSONP - который jQuery поддерживает практически без усилий с вашей стороны: вам просто нужно добавить ?callback=? в конец URL-адреса - за исключением того, что JSONP требует поддержки на сервере и выглядитбиткойны не поддерживают его.

Таким образом, самый простой способ продвинуться вперед - это получить данные в вашем коде на стороне сервера, где политика того же происхождения не будет вам мешать.

0 голосов
/ 10 октября 2011

Сейчас мне трудно найти ссылку, но проблема в том, что вы не можете получить доступ к ключу через точечную нотацию, вам нужен доступ к нему через нотацию массива.В вашем случае ...

data[0]["30d"]
...