0

我收到错误:

undefined:1
'{"completed_in":0.078,"max_id":333655176038719488,"max_id_str":"3336551760387
^
SyntaxError: Unexpected token '
    at Object.parse (native)
    at /home/tweets/10seconds.js:25:25
    at passBackControl (/home/tweets/node_modules/oauth/lib/oauth.js:367:11)
    at IncomingMessage.<anonymous> (/home/tweets/node_modules/oauth/lib/oauth.js:386:9)
    at IncomingMessage.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:895:16
    at process._tickCallback (node.js:415:13)

从搜索 API 解析 Twitter API JSON 时。

我正在使用解析这个 JSON 的代码是:

MongoClient.connect("mongodb://localhost:27017/db", function(err, db) {

 if(err) { return console.dir(err); }
  var collection = db.collection("tweets");

    while(run < 200){

        oa.get("http://search.twitter.com/search.json?q=morning&rpp=100&include_entities=true&result_type=mixed", access_token, access_token_secret, function(error, data) {
            var theTweets = JSON.parse(sys.inspect(data));

           collection.insert(theTweets, {w:1}, function(err, result) {});
           console.log(run);
        });
    run = run + 1;
    }

});

什么可能导致这种情况?

4

3 回答 3

0

可能的输出sys.inspect不是 JSON 它添加了引号'

于 2013-05-12T18:58:40.803 回答
0

你为什么用sys.inspect

如果 data 是 JSON 字符串,则使用JSON.parse(data);,如果它object已经是,那么您根本不必使用JSON.parse...

于 2013-05-12T18:59:17.280 回答
0

如其他答案和评论所述,问题出在 sys.inspect() 调用上。

如 nodejs 文档(http://nodejs.org/api/util.html#util_util_inspect_object_options)所述:

返回对象的字符串表示形式,这对于调试很有用。

顺便说一句,他们似乎将sys模块名称更改为util

您可以通过在较旧的节点版本上运行以下代码轻松地进行小型测试。它应该抛出你的错误:

var sys = require('sys');
var data = '{"test":1, "test2":2}';
sys.puts(JSON.parse(sys.inspect(data)));

然后删除 sys.inspect 调用。它应该正确解析对象:

var sys = require('sys');
var data = '{"test":1, "test2":2}';
sys.puts(JSON.parse(data));
于 2013-05-12T19:41:05.487 回答