0

Node.jsを使用してGoogleカスタム検索を呼び出して試してみます。結果は正常に返されますが、JSON.parse(dataFromGoogle)を使用してJSONを解析しようとすると、いくつかの要素(htmlタイトルとスニペット。htmlタイトルにはUnicodeエスケープシーケンスが含まれています)で不正なトークンエラーが発生します。 、しかし、スニペットで何が問題なのかわかりません)。GoogleにHTMLタイトルを返送させないようにすることはできますが、スニペットが本当に必要です。

これには適切な回避策がありますか、それとも不正な文字を手動で取り除くために追加の前処理を行うことを計画する必要がありますか?

* *編集:これからのコンソール出力を追加

Googleを使用して「中小企業」を検索する

\ u003cb \ u003eSmall Business \ u003c / b \ u003e Health Care Tax Cre ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^構文エラー:Object.parseで予期しないトークンが不正です(ネイティブ)IncomingMessageで。(/Users/pvencill/workspace/irslab/lib/searchEngine.js:44:35)IncomingMessage.emit(events.js:64:17)at HTTPParser.onBody(http.js:119:42)at CleartextStream.ondata (http.js:1213:22)CleartextStream._push(tls.js:291:27)at SecurePair._cycle(tls.js:565:20)at EncryptedStream.write(tls.js:97:13)at Socket Socket.emit(events.js:64:17)の.ondata(stream.js:40:26)

4

1 に答える 1

1

うわー、それで私はエラーが私に言っていることを完全に誤解したことがわかりました。それがユニコードを含むフィールドで起こっていたという事実は偶然の一致でした。本当の問題は、チャンク化された応答の一部を処理している.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 に答える