2

を使用しているアプリケーションがありますchrome.sockets。JSON は、デリミタを持たず、文字列の長さのプレフィックスが付いていないソケットとの間でやり取りされています。

現在、ソケットが読み込まれる方法chrome.socketsは、最大バッファ長を渡すことであり、バッファがいっぱいになるまで、利用可能なすべてのバイトを読み込みます。のドキュメントはここsocket.readにあります

パーサーを作成/移植するだけでなく、からの応答を単純にパイプできる JavaScript JSON パーサーはありますsocket.readか?

4

3 に答える 3

0

更新: JS が有効であることを確認する必要があるため、JSON.parse を使用して有効な JSON であるかどうかを確認できます。これは常に Chrome で利用できるはずです。arraybuffer を文字列に変換してアキュムレータ文字列に追加し、各反復後にその文字列に対して次のチェックを実行できます。

function isValidJSON(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
};


// assuming 16bit uint unicode chars
function ab2str(buf) {
   return String.fromCharCode.apply(null, new Uint16Array(buf));
}

以下は、使用できるコールバック関数の例です。

jsonData = "";
function readJSONFromSocket(object readInfo) {

    // Arraybuffer to string
    partialJSONData = ab2str(readInfo.data);
    // Loop through the chars until we get a valid JSON object
    for (var x = 0; x < partialJSONData.length; x++) {
        // Build up the JSON character by character
        jsonData += partialJSONData.charAt(x);
        if (isValidJSON(jsonData)) {
            console.log(jsonData);
            // Do something here
            jsonData = "";
        }
    }       
};
于 2013-05-17T15:57:26.253 に答える