当天的第二个问题:)
仍然处理我的第一个应用程序,并且我使用返回货币兑换值的API遇到了一些麻烦。我需要从这个JSON中提取当前的AUD值:
{"base":"USD","date":"2016-05-30","rates":{"AUD":1.3919,"BGN":1.7558,"BRL":3.6043,"CAD":1.3039,"CHF":0.99273,"CNY":6.5817,"CZK":24.258,"DKK":6.6765,"GBP":0.68341,"HKD":7.7688,"HRK":6.7195,"HUF":281.72,"IDR":13645.0,"ILS":3.8466,"INR":67.139,"JPY":111.19,"KRW":1190.9,"MXN":18.473,"MYR":4.1175,"NOK":8.3513,"NZD":1.4924,"PHP":46.73,"PLN":3.9447,"RON":4.0428,"RUB":65.89,"SEK":8.3338,"SGD":1.3811,"THB":35.73,"TRY":2.9565,"ZAR":15.771,"EUR":0.89775}}
以下是我正在使用的代码:
var http = require('http');
var options = {
host: 'api.fixer.io',
port: 80,
path: '/latest?base=USD',
method: 'GET'
};
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', function (chunk) {
const json = JSON.parse(chunk);
rate = json.AUD;
console.log(rate);
});
}).end();
不幸的是,这不起作用,我认为这是因为JSON是嵌套的?如何正确查询此嵌套字符串?
我也知道我需要加强对块的处理,但现在这对我来说是个小步骤:)
谢谢!
答案 0 :(得分:1)
不是json.AUD,它是
json.rates.AUD
答案 1 :(得分:0)
您应该先等待整个数据,或者使用其中一个流解析器(例如:https://github.com/dominictarr/JSONStream)。
这是因为“chunk”并不是所有数据 - 它可能只是其中的一部分,这意味着它本身并不是一个有效的JSON。
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
var data = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
const json = JSON.parse(data);
// As @huaoguo mentioned, it should be `json.rates.AUD`, not `json.AUD`
rate = json.rates.AUD;
console.log(rate);
});
}).end();
另外,正如@huaoguo所提到的,应该有json.rates.AUD
而不是json.AUD
。