2016-12-14 8 views
2

Я пытаюсь преобразовать данные объекта JSON из http://api.fixer.io/latest?base=USD, который содержит в объект JavaScript `Как преобразовать объект JSON в объект JavaScript

{ 
    "base": "USD", 
    "date": "2016-12-14", 
    "rates": { 
     "AUD": 1.3319, 
     "BGN": 1.8375, 
     "BRL": 3.311, 
     "CAD": 1.3116, 
     "CHF": 1.0097, 
     "CNY": 6.9052, 
     "CZK": 25.388, 
     "DKK": 6.986, 
     "GBP": 0.78883, 
     "HKD": 7.7566, 
     "HRK": 7.0843, 
     "HUF": 295.84, 
     "IDR": 13288, 
     "ILS": 3.8097, 
     "INR": 67.479, 
     "JPY": 114.98, 
     "KRW": 1166, 
     "MXN": 20.262, 
     "MYR": 4.4441, 
     "NOK": 8.4764, 
     "NZD": 1.3849, 
     "PHP": 49.716, 
     "PLN": 4.1716, 
     "RON": 4.2421, 
     "RUB": 61.197, 
     "SEK": 9.1651, 
     "SGD": 1.424, 
     "THB": 35.59, 
     "TRY": 3.4879, 
     "ZAR": 13.67, 
     "EUR": 0.9395 
    } 
} 

Что я пытался до сих пор в консоли

var text = $.getJSON('http://api.fixer.io/latest?base=GBP') 
var obj = JSON.parse(text); 

который дает мне ошибку.

var text = $.getJSON('http://api.fixer.io/latest?base=GBP') 
var obj = JSON.stringify(text, 0, 2) 

, который превращает все в строку, которая не то, что я хотел.

Я пытаюсь достигнуть (после того, как управлять, чтобы преобразовать их в объект)

obj.rates.AUD 

Который возвращает значение 1.3319, которое из данных объекта JSON. Спасибо

+3

«который дает мне ошибку». Какая ошибка? – Eric

+0

Сначала я столкнулся с ошибкой http/https, вы можете отказаться от протокола. – wyldstallyns

+0

Прочтите документацию: https://api.jquery.com/jquery.getjson/. –

ответ

1

Если вы просто посмотрите на ответ этого запроса, вы увидите, что JSON входит в свойство responseText. Вобще:

var obj = JSON.parse(text.responseText); 

Кроме того, getJson асинхронный вызов, так что вам нужно сделать это в функции обратного вызова в противном случае ответ может еще не существует:

var obj; 
var text = $.getJSON('http://api.fixer.io/latest?base=GBP', function() { 
    obj = JSON.parse(text.responseText); 
}); 

Edit: Как комментатора отметил, вы также можно просто получить JSON прямо из свойства responseJSON:

var obj; 
var text = $.getJSON('http://api.fixer.io/latest?base=GBP', function(){ 
    obj = text.responseJSON; 
}); 
+0

В Chrome, похоже, уже разобран в ответ. ResponseJSON – wyldstallyns

+0

Вы также можете получить его от responseJSON! – Pabs123

+0

Ответ JSON также передается в качестве аргумента функции обратного вызова в соответствии с ответом Paulpro. – Andy

3

JQuery-х getJSON разбирает JSON для вас, но запрос является асинхронным, поэтому он не возвращается текст ответа напрямую; вместо этого он возвращает jqXHR object.

Это должно работать для вас:

$.getJSON('http://api.fixer.io/latest?base=GBP').then(function (obj) { 
    console.log(obj); 
}); 
0

Не используйте JSON.parse() или JSON.stringify(). Как показано в jquery docs, $.getJSON(url , callback) выполняет обратный вызов. Также $ .getJSON() использует $ .parseJSON() за кулисами, поэтому по умолчанию объект будет передан в обратный вызов.

Ваша проблема ..

< var text = $.getJSON('http://api.fixer.io/latest?base=GBP') - возвращает ничего

Решения .. добавить функцию обратного вызова

var text = $.getJSON('http://api.fixer.io/latest?base=GBP' , function(response){ 

console.log(response.rates.AUD); 

}) 

документы: http://api.jquery.com/jquery.getjson/

Надеется, что это помогает ,

Смежные вопросы