手工构建的JSON与JSON.stringify

时间:2013-01-25 15:58:25

标签: javascript json stringify

背景

我有一堆对象需要将它们的状态以json表示形式发送到服务器。它目前的工作原理如下:

MyClass.prototype.GetJSON(){
    return '{"title":"' + m_Title + '","description":"' + m_Desc + '"}'; 

};

问题

与我合作的人建议我做这样的事情:

MyClass.prototype.GetJSON(){
    return JSON.stringify( {title:m_Title, description:m_Desc} ); 

};

做这样的事情的利弊是什么?它比我现在做的更有效率还是更低效率?

4 个答案:

答案 0 :(得分:4)

如果m_Title中包含JS metachars会怎么样?

m_Title = 'John "Beast" Johnson';
制造

{"title":"John "Beast" Johnson", ...}
                ^^^^^--oops

很好的语法错误。很抱歉您的代码刚刚造成了动力装置崩溃。

当您的主机语言有能力为您完成时,永远不要手工构建JSON。

这与SQL注入问题完全相同 - 未考虑插入文本所使用的环境,并盲目地假设任何事情都不会出错。

答案 1 :(得分:2)

使用JSON库而非字符串混搭的优点:

  • 代码更清晰:更易于阅读,更易于调试,更易于理解代码的目的
  • 库中需要一个(不太可能的)错误来生成无效的JSON

使用字符串糖化的好处:

没有。

答案 2 :(得分:1)

使用JSON.stringify

这是

  • 更多标准
  • 更易于阅读:无需检查代码是什么
  • 一定要逃避需要逃脱的事情

保留现有代码会在您在字符串中引用的那一天或您尝试将当前应用程序逻辑扩展到其他类型的那一天给您带来惊喜。

如果您支持IE7很重要,则应考虑到您需要一个库(请参阅compatibility)。

答案 3 :(得分:0)

效率稍低,但标准化程度更高。另外,使用stringify会阻止注入......