我有一堆对象需要将它们的状态以json表示形式发送到服务器。它目前的工作原理如下:
MyClass.prototype.GetJSON(){
return '{"title":"' + m_Title + '","description":"' + m_Desc + '"}';
};
与我合作的人建议我做这样的事情:
MyClass.prototype.GetJSON(){
return JSON.stringify( {title:m_Title, description:m_Desc} );
};
做这样的事情的利弊是什么?它比我现在做的更有效率还是更低效率?
答案 0 :(得分:4)
如果m_Title中包含JS metachars会怎么样?
m_Title = 'John "Beast" Johnson';
制造
{"title":"John "Beast" Johnson", ...}
^^^^^--oops
很好的语法错误。很抱歉您的代码刚刚造成了动力装置崩溃。
当您的主机语言有能力为您完成时,永远不要手工构建JSON。
这与SQL注入问题完全相同 - 未考虑插入文本所使用的环境,并盲目地假设任何事情都不会出错。
答案 1 :(得分:2)
使用JSON库而非字符串混搭的优点:
使用字符串糖化的好处:
没有。
答案 2 :(得分:1)
使用JSON.stringify
。
这是
保留现有代码会在您在字符串中引用的那一天或您尝试将当前应用程序逻辑扩展到其他类型的那一天给您带来惊喜。
如果您支持IE7很重要,则应考虑到您需要一个库(请参阅compatibility)。
答案 3 :(得分:0)
效率稍低,但标准化程度更高。另外,使用stringify
会阻止注入......