2014-09-29 50 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