我正在尝试将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对象数据。感谢
答案 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/
希望这有帮助。