2016-03-13 3 views
1

Хотите хранить объект JSON в ArrayBufferмагазин объект JSON в ArrayBuffer

function stringToUint(string) { 
    var string = btoa(unescape(encodeURIComponent(string))), 
     charList = string.split(''), 
     uintArray = []; 
    for (var i = 0; i < charList.length; i++) { 
     uintArray.push(charList[i].charCodeAt(0)); 
    } 
    return new Uint8Array(uintArray); 
} 

function uintToString(uintArray) { 
    var encodedString = String.fromCharCode.apply(null, uintArray), 
     decodedString = decodeURIComponent(escape(atob(encodedString))); 
    return decodedString; 
} 
var str = {'x':'aaaa'}, 
    enc = stringToUint(str), 
    dec = uintToString(enc); 

console.log(dec.x); 

console.log(dec.x); печатает `неопределенными. Я делаю это неправильно? здесь jsfiddle http://jsfiddle.net/DQJyX/137/

ответ

3

Поскольку stringToUint ожидает строку, и передача объекта к нему будет преобразовывать {'x':'aaaa'} в [Object object] и возвращает массив, представляющий этот объект объекта, и, следовательно, при вызове uintToString, массив преобразуется обратно в [Object object].

Простым решением является использование JSON.stringify объекта перед передачей его функции, а затем с использованием JSON.parse для преобразования в исходный объект.

function stringToUint(string) { 
 
    var string = btoa(unescape(encodeURIComponent(string))), 
 
     charList = string.split(''), 
 
     uintArray = []; 
 
    for (var i = 0; i < charList.length; i++) { 
 
     uintArray.push(charList[i].charCodeAt(0)); 
 
    } 
 
    return new Uint8Array(uintArray); 
 
} 
 

 
function uintToString(uintArray) { 
 
    var encodedString = String.fromCharCode.apply(null, uintArray), 
 
     decodedString = decodeURIComponent(escape(atob(encodedString))); 
 
    return decodedString; 
 
} 
 
var str = {'x':'aaaa'}, 
 
    enc = stringToUint(JSON.stringify(str)), 
 
    dec = JSON.parse(uintToString(enc)); 
 
    
 
document.write(dec.x);

+0

Как я могу получить обратно JSON от того, что мы получаем от 'Utils.stringToUint (JSON.stringify (ул))' ' – manish

+0

с помощью JSON.parse' –

0

для того, чтобы работать вам нужно, в вызове функции stringToUint к JSON.stringify.

function stringToUint(string) { 
    var string = btoa(unescape(JSON.stringify(string))), 
     charList = string.split(''), 
     uintArray = []; 
    for (var i = 0; i < charList.length; i++) { 
     uintArray.push(charList[i].charCodeAt(0)); 
    } 
    return new Uint8Array(uintArray); 
} 

function uintToString(uintArray) { 
    var encodedString = String.fromCharCode.apply(null, uintArray), 
     decodedString = decodeURIComponent(escape(atob(encodedString))); 
    return decodedString; 
} 
var str = {'x':'aaaa'}, 
    enc = stringToUint(str), 
    dec = uintToString(enc); 

console.log(dec);