使用NODE解析嵌套的JSON

时间:2016-05-31 03:05:34

标签: json node.js

当天的第二个问题:)

仍然处理我的第一个应用程序,并且我使用返回货币兑换值的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是嵌套的?如何正确查询此嵌套字符串?

我也知道我需要加强对块的处理,但现在这对我来说是个小步骤:​​)

谢谢!

2 个答案:

答案 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