2012-01-19 128 views
2

我正在使用电话差距,我想用手机差距文件api读取文件。我可以读取文件。但是当我把我的JSON放入一个变量时,它只返回'[]'。使用JSON填充JavaScript变量

var json; 
function readFS(fileSystem) { 
      fileSystem.root.getFile("readme.txt", {create: true}, readFileEntry, fail); 
     } 

     function readFileEntry(fileEntry) { 
      fileEntry.file(gotFileread, fail); 
     } 

     function gotFileread(file){ 
      readAsText(file); 
     } 


     function readAsText(file) { 
      var reader = new FileReader(); 
      reader.onloadend = function(evt) { 
       console.log("Read as text"); 
       console.log(evt.target.result); 
       json = evt.target.result; // this returns only [] 
       navigator.notification.alert(evt.target.result); // this returns the real JSON :o 

      }; 
      reader.readAsText(file); 
     } 

这是在readme.txt文件

{"games":[{"id":"2","name":"bartje","photo":"photo2.png","description":"kimpe","length":"is","totalDownloads":"0","totalFinished":"0","locations":[{"id":"3","name":"loc21","photo":"loc21.jpg","description":"loc21","FK_Game_id":"2","lat":"51.0000","long":"4.0000","status":"0"},{"id":"5","name":"loc22","photo":"loc22.jog","description":"locatie 22","FK_Game_id":"2","lat":"51.2330","long":"40.2222","status":"1"}]},{"id":"3","name":"aa","photo":"photo3.jPg","description":"aa","length":"aa","totalDownloads":"0","totalFinished":"3","locations":[{"id":"4","name":"loc4","photo":"loc4.jpg","description":"loc4","FK_Game_id":"3","lat":"51.2191","long":"4.4021","status":"0"}]}]} 

我现在可以从文件中检索数据,并把它放在一个变量的JSON。现在我唯一的问题是我不能用它作为JSON像

json.games[0].id 

我试图做

json = eval(evt.target.result); 

但是,这并不工作:○

+0

这不会解决你的问题......但是,一旦你得到正确的JSON文本,你将需要eval()的入JSON变量。 –

回答

2

尝试:

myJson = JSON.parse(evt.target.result); 

因为这将创建一个从你读过的文本对象

+0

这不起作用,它也返回[] –

+0

我刚才意识到它可能是与'json'的名称冲突。尝试调用其他变量,如'myJson'。 –

+0

你是对的!它是'myJSON = jQuery.parseJSON(evt.target.result)'。现在我可以用它作为真正的JSON –

0

这工作,所以它可能有与你如何阅读文件有关。你在console.log(evt.target.result);中看到什么?

var g = {"games":[{"id":"2","name":"bartje","photo":"photo2.png","description":"kimpe","length":"is","totalDownloads":"0","totalFinished":"0","locations":[{"id":"3","name":"loc21","photo":"loc21.jpg","description":"loc21","FK_Game_id":"2","lat":"51.0000","long":"4.0000","status":"0"},{"id":"5","name":"loc22","photo":"loc22.jog","description":"locatie 22","FK_Game_id":"2","lat":"51.2330","long":"40.2222","status":"1"}]},{"id":"3","name":"aa","photo":"photo3.jPg","description":"aa","length":"aa","totalDownloads":"0","totalFinished":"3","locations":[{"id":"4","name":"loc4","photo":"loc4.jpg","description":"loc4","FK_Game_id":"3","lat":"51.2191","long":"4.4021","status":"0"}]}]} 

alert(g.games[0].id) --> "2" 

alert(g.games[0].locations[0].name) --> "loc21" 
+0

我得到JSON文件前面有很多空格: –

0

如果evt.target.result字符串

'{"games":[{"id":"2","name":"bartje","photo":"photo2.png","description":"kimpe","length":"is","totalDownloads":"0","totalFinished":"0","locations":[{"id":"3","name":"loc21","photo":"loc21.jpg","description":"loc21","FK_Game_id":"2","lat":"51.0000","long":"4.0000","status":"0"},{"id":"5","name":"loc22","photo":"loc22.jog","description":"locatie 22","FK_Game_id":"2","lat":"51.2330","long":"40.2222","status":"1"}]},{"id":"3","name":"aa","photo":"photo3.jPg","description":"aa","length":"aa","totalDownloads":"0","totalFinished":"3","locations":[{"id":"4","name":"loc4","photo":"loc4.jpg","description":"loc4","FK_Game_id":"3","lat":"51.2191","long":"4.4021","status":"0"}]}]}'; 

将其转换为对象使用

var result = eval(evt.target.result); 

,那么你可以给

var games = dataObject.games; 
for(var i = 0; i< games.length; i++){ 
    var game = games[i]; 
    // then access properties games.id, games.name, games.photo ... etc.. 
} 
+0

var games = result.games你的意思是?但evt.target.result不会给出字符串 –

+0

尽可能避免使用eval()并使用更安全的JSON.parse()。 –