我打电话给Google自定义搜索w/ Node.js来尝试。我可以很好地得到结果,但是当我尝试使用JSON.parse(dataFromGoogle)解析JSON时,我会得到一些元素(html标题和片段;html标题中包含unicode转义序列,但我不知道哪里出错了)的非法标记错误。我可以让谷歌不给我发回html标题,但我真的需要片段!
是否有一个好的解决办法,或者我应该只是计划做一些额外的预处理,以剔除非法字符手动?
**编辑:添加了控制台输出
使用谷歌搜索“小企业”
{“customsearch#search”:"customsearch#search","url":{ "type":"application/json","https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&hr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&alt=json“},”查询“:{ "nextPage":{”标题“:"Google自定义搜索-小企业”,"totalResults":"42300","searchTerms":“小企业”,“计数”:10,"startIndex":11,"inputEncoding":"utf8","outputEncoding":"utf8","safe":"off","cx":"my_token“},"request":{ "title":"Google定制搜索-小企业”,"totalResults":"42300","searchTerms":“小企业”,“计数”:10,"startIndex":1,"inputEncoding":"utf8","outputEncoding":"utf8","safe":"off","cx":"my_token“},“上下文”:{“标题”:"IR未定义:60 "htmlTitle":"\u003cb\u003eSmall Business\u003c/b\u003e医疗保健税Cre htmlTitle SyntaxError: Object.parse (原生) at IncomingMessage的意外令牌非法。(/Users/pvencill/workspace/irslab/lib/searchEngine.js:44:35) at IncomingMessage.emit (events.js:64:17) at HTTPParser.onBody (http.js:119:42) at CleartextStream.ondata (http.js:1213:22) at CleartextStream._push (tls.js:291:27) at SecurePair._cycle (tls.js:565:20) at EncryptedStream.write (tls.js:97:13)Socket.ondata (stream.js:40:26) at Socket.emit (events.js:64:17)
发布于 2011-10-26 19:06:55
原来我完全误解了错误告诉我的意思。它发生在含有unicode的字段上,这是巧合。真正的问题是我在.on中调用了.on(“数据”,.)处理程序,它处理分组响应的一部分;在块完成之前可能不是有效的JS语句终止符。正确的处理方法是构建主体,然后使用on("end")来解析它。
var message = "";
https.get(options, function(res){
res.setEncoding('utf8');
res.on('data', function(data){
message += data;
});
res.on('end', function(){
if(callback){
var data = JSON.parse(message);
data.items = data.items || [];
callback(data);
}
});
res.on('error', function(error){
console.log("ERROR" + error.message);
});https://stackoverflow.com/questions/7840003
复制相似问题