从node.js中的curl命令解析JSON值

时间:2012-02-25 21:30:10

标签: json node.js curl

我可以使用以下代码从Twitter获取JSON流到客户端:

var command = 'curl -d @tracking https://stream.twitter.com/1/statuses/filter.json -uUsername:Password'

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});

  child = exec(command);

  child.stdout.on('data', function(data) {

  res.write(data);

  });

}).listen(1337, "127.0.0.1");

但我无法从JSON中获取'text'或'id'值。我尝试过使用jQuery的parsJSON(),以及像这样的代码:

var command = 'curl -d @tracking https://stream.twitter.com/1/statuses/filter.json -uUsername:password'

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});

  child = exec(command);

  child.stdout.on('data', function(data) {

  for (i=0; i<data.length; i++) {
    reduceJSON = data[i]["text"]
    stringJSON = String(reduceJSON)
    res.write(stringJSON);
}

});

}).listen(1337, "127.0.0.1");

我不断获取'undefined'或'readyStatesetRequestHeadergetAllResponseHeadersgetResponseHeader'或'object:object'的流。任何人都知道如何获得个人价值观?

1 个答案:

答案 0 :(得分:4)

简短的回答是data是一个字符串,而不是JSON。您需要缓冲所有数据,直到child发出'结束'。结束运行后,您需要使用JSON.parse将数据转换为JavaScript对象。

也就是说,使用一段时间单独的cURL过程在这里没有任何意义。我会使用request模块,并执行以下操作:

var request = require('request');
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});

  var r = request.post(
    'https://stream.twitter.com/1/statuses/filter.json',
    { auth: "Username:Password", 'body': "track=1,2,3,4" },
    function(err, response, body) {
      var values = JSON.parse(body);

      console.log(values);

    }
  );
  r.end();
}).listen(1337, "127.0.0.1");

如果这不起作用,请告诉我。我显然没有用户或密码,所以我无法测试它。