0

我正在调用带有 Node.js 的 Google 自定义搜索来尝试。我得到的结果很好,但是当我尝试使用 JSON.parse(dataFromGoogle) 解析 JSON 时,我在许多元素(html 标题和片段;html 标题中有 unicode 转义序列)上遇到非法令牌错误,但我不确定这些片段有什么问题)。我可以让谷歌不给我发回 html 标题,但我真的需要这些片段!

有没有很好的解决方法,还是我应该计划做一些额外的预处理来手动去除非法字符?

* *编辑:从这里添加控制台输出

使用 Google 搜索“小型企业”

\u003cb\u003eSmall Business\u003c/b\u003e Health Care Tax Cre ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Unexpected token ILLEGAL at Object.parse (本机)在 IncomingMessage。(/Users/pvencill/workspace/irslab/lib/searchEngine.js:44:35) 在 IncomingMessage.emit (events.js:64:17) 在 HTTPParser.onBody (http.js:119:42) 在 CleartextStream.ondata (http.js:1213:22) 在 CleartextStream._push (tls.js:291:27) 在 SecurePair._cycle (tls.js:565:20) 在 EncryptedStream.write (tls.js:97:13) 在 Socket .ondata (stream.js:40:26) 在 Socket.emit (events.js:64:17)

4

1 回答 1

1

哇,原来我完全误解了错误告诉我的内容。它发生在包含 unicode 的字段上的事实是巧合。真正的问题是我在 .on("data", ...) 处理程序中调用 JSON.parse,该处理程序正在处理分块响应的一部分;在块完成之前可能不是有效的 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);
            });
于 2011-10-26T19:06:55.950 回答