如何将JSON对象转换为JavaScript对象

时间:2016-12-14 19:15:46

标签: javascript json

我正在尝试将JSON对象数据从包含的http://api.fixer.io/latest?base=USD转换为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 个答案:

答案 0 :(得分:3)

jQuery' getJSON为您解析JSON,但请求是异步的,因此它不会直接返回响应文本;相反,它返回jqXHR object

这应该适合你:

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

答案 1 :(得分: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);
});

编辑:正如评论者指出的那样,您也可以直接从responseJSON属性获取JSON:

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

答案 2 :(得分: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);

})

docs: http://api.jquery.com/jquery.getjson/

希望这有帮助。