2013-02-16 33 views
0

我正在處理一個需要將用戶數據保存爲JSON格式的程序。這是做得很好,我的數據保存爲JSON,但是當我嘗試使用JSON.parse解析我存儲的JSON時,它不起作用。 這裏是我用於存儲數據代碼:JSON.parse不能在PhoneGap中工作

function writeUser(data) { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs){ 
     fs.root.getFile('user.data', {create: true, exclusive: false}, function(fe){ 
      fe.createWriter(function(writer){ 
       //Its converts my data to JSON here 
       writer.write(JSON.stringify(data)); 
       //It displays this so I knows its been written! 
       console.log('File written'); 
      }, failwrite); 
     }, failwrite); 
    }, failwrite); 
} 
function failwrite(error) { 
    console.log(error.code); 
} 

,這裏是讀取我的數據的代碼:

function readUser(){ 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs){ 
     fs.root.getFile('user.data', null, function(fe){ 
      fe.file(function(file){ 
       return readAsText(file); 
      }, failread); 
     }, failread); 
    }, failread); 
} 
function readAsText(file) { 
    var reader = new FileReader(); 
    reader.onloadend = function(evt) { 
     console.log(evt.target.result); 
    }; 
    return reader.readAsText(file); 
} 

它返回我的數據細如字符串,這裏是我得到的字符串{"status":"true","id":"1","password":"xx"},但是當我用我的數據使用JSON.parse時,它返回未識別的對象。這裏是它採用JSON.parse部分:

readUser(); 
var user = JSON.parse(readUser()); 
console.log(user); 

它甚至不會運行我與解析的JSON的console.log命令。

回答

2

readUser不返回任何內容。該文件的內容在readAsText回調中可用。你必須json解析evt.target.result並從那裏繼續。

+0

所以我會用改變我evt.target.result爲'JSON.parse(evt.target.result)'和然後返回'reader.readAsText(文件);'? – C1D 2013-02-16 09:41:31

+0

我只是想出你的意思!非常感謝:D – C1D 2013-02-16 09:52:31

2

對於閱讀用途:

jsonVariable = jQuery.parseJSON(evt.target.result); 

有關寫入使用:

writer.write(JSON.stringify(propFileJson));