2016-06-30 22 views
7

tôi có các đối tượng Javascript lớn mà tôi muốn mã hóa để căn-64 cho AWS Kinesis` Nó chỉ ra rằng:Base64 mã hóa một đối tượng javascript

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

Tôi đang cố gắng để giữ này đơn giản như khả thi.

Làm cách nào để mã hóa base-64 JSON và giải mã nó trở lại giá trị ban đầu?

+0

Tại sao bạn mong đợi chúng bằng nhau? –

+0

Vâng, tôi đang cố gắng làm với 'base-64' những gì' JSON.parse (JSON.stringify (obj)) 'hiện trên các đối tượng. Làm thế nào tôi có thể làm điều đó? – johni

+0

Mã hóa url có hoạt động không? Chuỗi kết quả có thể nhỏ hơn nếu nó được mã hóa 64. –

Trả lời

11

Bạn hiểu lầm các nhà xây dựng Buffer(str, [encoding]), các encoding nói với các nhà xây dựng những gì mã hóa được sử dụng để tạo str, hoặc những gì mã hóa các nhà xây dựng nên sử dụng để giải mã str vào một mảng byte.

Về cơ bản, lớp Buffer đại diện cho luồng byte, chỉ khi bạn chuyển đổi từ/sang chuỗi mã hóa đi vào ngữ cảnh.

Thay vào đó, bạn nên sử dụng buffer.toString("base64") để mã hóa cơ sở 64 nội dung bộ đệm.

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

Cảm ơn bạn đã giải thích. Về ví dụ của bạn - nó không hoạt động trên các JSON lớn. Tôi vừa kiểm tra điều đó, giải mã chỉ trả về một phần của JSON gốc. – johni

+0

JSON của bạn lớn đến mức nào? Tôi đã thử một số lớn và nó hoạt động tốt. –

+0

Đúng, bạn nói đúng. Tôi có thể chỉ chọn một phần của chuỗi được mã hóa. – johni

Các vấn đề liên quan