2014-09-29 43 views
0

我的JSON.parse在首先被調用時成功。但是從第二次調用,發生意外的令牌錯誤。我發現在下面的其他問題的一些解釋..JSON.parse錯誤....意外的標記{來自第二個

「如果你再次解析它會首先執行toString-cast,所以你解析的東西像」[對象對象「],這解釋了意想不到的令牌o「

我怎樣才能做出新鮮的解析。我的代碼如下所示。

var musicEntry=""; 

function parsing(){ 
    ... 
    for(var i=0;i<musicList.length;i++){ 
     musicEntry=musicEntry+ '{"fileName":"'+musicList[i].title+'"},'; 
    } 
     ..... 

     var musicJsonObjString='{"music":['+ musicEntry +']}'; 
     musicJsonObj=JSON.parse(musicJsonObjString); 

} 
+5

如果你只在JavaScript中,你需要真正建立字符串只能解析它嗎?直接構建對象會更有意義,如果實際需要字符串表示形式,則使用「JSON.stringify」。 – 2014-09-29 13:32:52

+1

爲什麼在世界中,您會構建一個字符串以開始? – epascarello 2014-09-29 13:33:50

+1

'musicJsonObj + ='會不會更好? – diEcho 2014-09-29 13:35:39

回答

1

我推薦使用JSON.stringify(),而不是試圖編寫自己的JSON編碼器。雖然您的方法現在可以處理固定的尾隨逗號問題,但您還需要防止音樂標題屬性中的保留字符。

只需建立一個JavaScript對象(或陣列),並給它JSON.stringify(OBJ)

工作實例

var musicList = [{ 
    title: 'foo' 
}, { 
    title: 'bar' 
}]; 

var array = []; 
for (var i = 0; i < musicList.length; i++) { 
    array.push({fileName: musicList[i].title}) 
} 

var musicJsonObjString = JSON.stringify({music: array}); 
var musicJsonObj = JSON.parse(musicJsonObjString); 
console.log("music", musicJsonObj); 
+0

真的謝謝。我改變了你的建議array.push我的。現在解決:) – 2014-09-29 13:56:31

+0

@LoganYoon不用擔心 – Adam 2014-09-29 13:59:53

1

你需要從數組中刪除最後一個逗號:

var musicJsonObjString='{"music":[' + musicEntry.substr(0, musicEntry.length - 1) + ']}'; 
+0

是的..我省略了。我的代碼有.. musicEntry = musicEntry.substring(0,musicEntry.length - 1);完成for循環後。 – 2014-09-29 13:34:28

+0

所以你的問題似乎在其他地方。向我們展示完整的代碼或jsFiddle – antyrat 2014-09-29 13:35:46

相關問題