使用Node从API查询返回的JSON中搜索项目

时间:2016-05-31 01:10:10

标签: json node.js

我在Node旅程的最初阶段编写了我的第一个小应用程序。我想从markitondemand.com查询股票代码并返回当前股票价格。我的查询和响应工作正常,但我无法解决如何对返回的数据进行排序以仅提取当前价格。这是我正在运行的代码:

var http = require('http');
var options = {
  host: 'dev.markitondemand.com',
  port: 80,
  path: '/MODApis/Api/v2/Quote/jsonp?symbol=AAPL&callback=myFunction',
  method: 'GET'
};

http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log(chunk);    
  });
}).end();

这是我从服务器收到的数据:

myFunction({"Status":"SUCCESS","Name":"Apple Inc","Symbol":"AAPL","LastPrice":100.33,"Change":-0.0799999999999983,"ChangePercent":-0.0796733393088321,"Timestamp":"Fri May 27 15:59:00 UTC-04:00 2016","MSDate":42517.6659722222,"MarketCap":549550050250,"Volume":3169443,"ChangeYTD":105.26,"ChangePercentYTD":-4.68364050921528,"High":100.47,"Low":99.26,"Open":99.49})

如何通过此搜索从" LastPrice":100.33键值对中提取100.33?我想过使用.filters方法,但是我不相信返回的是一个格式正确的数组?

谢谢!

1 个答案:

答案 0 :(得分:4)

请求JSON而不是jsonp。这样你就可以使用JSON.parse了。 jsonp专为尝试解决CORS策略的浏览器而设计。由于您正在运行服务器,因此无需担心此类问题。

网址(通知 / json?而不是 / jsonp?):

http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=AAPL

CODE:

const json = JSON.parse(chunk);
console.log(json.LastPrice);

侧面注意:

如果该API发送了分块JSON,您可能需要在解析之前累积这些块。类似的东西:

  let data = '';

  res.on('data', function (chunk) {
    data += chunk;  
  });

  res.on('end', function () {
    const json = JSON.parse(data);
    console.log(json.LastPrice);
  });