2016-06-30 55 views
7

ho grandi oggetti JavaScript che vorrei per codificare basare-64 per AWS Kinesis` Si scopre che:Base64 codificare un oggetto JavaScript

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

Sto cercando di mantenere questo semplice come possibile.

Come posso codificare in base a 64 JSON e decodificarlo in modo sicuro al suo valore originale?

+0

Perché ti aspetteresti uguale? –

+0

Beh, sto provando a fare con 'base-64' cosa fa' JSON.parse (JSON.stringify (obj)) sugli oggetti. Come lo posso fare? – johni

+0

Anche la codifica dell'URL funziona? La stringa risultante potrebbe essere inferiore rispetto a se è codificata in base 64. –

risposta

11

hai frainteso il costruttore Buffer(str, [encoding]), il encoding dice il costruttore la codifica usata per creare str, o quello che codifica per il costruttore deve utilizzare per decodificare str in un array di byte.

Fondamentalmente la classe Buffer rappresenta i flussi di byte, è solo quando si converte da/a stringhe che la codifica entra nel contesto.

Utilizzare invece buffer.toString("base64") per ottenere la codifica base-64 del contenuto del buffer.

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

Grazie per la spiegazione. Per quanto riguarda il tuo esempio, non funziona su JSON di grandi dimensioni. L'ho appena verificato, la decodifica restituisce solo parzialmente il JSON originale. – johni

+0

Quanto è grande il tuo JSON? Ho provato alcuni grandi e sta funzionando bene. –

+0

Sì, hai ragione. Probabilmente ho selezionato solo una parte della stringa codificata. – johni