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

3

我正在尝试将包含在http://api.fixer.io/latest?base=USD中的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

该代码将返回JSON对象数据中的值1.3319。谢谢。


3
“which gives me an error.” 的意思是“这导致了一个错误。”但并没有提到具体是什么错误。 - Eric
我一开始遇到了http/https错误,你可能需要去掉协议。 - wyldstallyns
请阅读文档:https://api.jquery.com/jquery.getjson/。 - Felix Kling
3个回答

3

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

这对您应该有用:

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

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;
});

在 Chrome 中,它似乎已经在 response.responseJSON 中解析了。 - wyldstallyns
你也绝对可以从 responseJSON 中获取它! - Pabs123
JSON响应也会根据Paulpro的答案作为参数传递给回调函数。 - Andy

0

不要使用 JSON.parse() 或者 JSON.stringify()。如jquery文档所示,$.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/

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接