2016-06-30 19 views
7

私はベース64をするAWS Kinesis` のためにそれがあることが判明しエンコードしたい大Javascriptのオブジェクトを持っている:私は、このような単純なを維持しようとしているBase64ではjavascriptオブジェクトをエンコード

let objStr = new Buffer(JSON.stringify(obj), 'ascii'); 
new Buffer(objStr, 'base64').toString('ascii') !== objStr 

を可能。

JSONをベース64でエンコードして安全に元の値に戻すにはどうすればよいですか?参考のために戻って実際の

var actual = JSON.parse(atob(e)) 

にデコードするために64ビット

var obj = {a: 'a', b: 'b'}; 
var encoded = btoa(JSON.stringify(obj)) 

に文字列から

+0

なぜあなたはそれらが等しいと思いますか? –

+0

これは、JSON.parse(JSON.stringify(obj))がオブジェクトに対して何を行うのかを 'base-64'としています。どうやってやるの? – johni

+0

URLエンコードもできますか?結果の文字列は、基数64でエンコードされた文字列よりも小さくなる可能性があります。 –

答えて

11

あなたはBuffer(str, [encoding])コンストラクタ、encodingstrを作成するために使用されたものエンコーディングコンストラクタを伝え、またはバイト配列にstrを復号化するためにどのようなコンストラクタをコードを使用する必要がありますを誤解。

基本的には、Bufferクラスはバイトストリームを表します。エンコーディングがコンテキストに入る文字列から/に文字列を変換するときだけです。

代わりにbuffer.toString("base64")を使用して、バッファの内容をベース64でエンコードする必要があります。

let objJsonStr = JSON.stringify(obj); 
let objJsonB64 = Buffer.from(objJsonStr).toString("base64"); 
+0

ありがとうございます。あなたの例に関しては、大規模なJSONでは動作しません。私はちょうどそれを確認したところで、デコードは元のJSONの一部だけを返します。 – johni

+0

あなたのJSONの大きさは?私はいくつかの大きなものを試して、それは正常に動作しています。 –

+0

はい、そうです。私はおそらく、エンコードされた文字列の一部だけを選択しました。 – johni

関連する問題