我收到错误:
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)
从Search 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;
}
});
是什么导致这种情况?
答案 0 :(得分:0)
可能sys.inspect
的输出不是JSON,而是添加引用'
。
答案 1 :(得分:0)
您为什么使用sys.inspect
?
如果数据是JSON字符串,那么使用JSON.parse(data);
,如果它已经是object
,那么您根本不必使用JSON.parse
...
答案 2 :(得分: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));