1

背景

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

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

};

问题

和我一起工作的人建议我做这样的事情:

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

};

做这样的事情有什么好处/坏处?它比我已经在做的效率更高/更低吗?

4

4 回答 4

5

如果 m_Title 里面有 JS 元字符怎么办?

m_Title = 'John "Beast" Johnson';

生产

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

不错的语法错误。很抱歉您的代码刚刚导致动力装置崩溃。

当您的宿主语言可以为您完成时,切勿手动构建 JSON。

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

于 2013-01-25T16:02:07.343 回答
2

与字符串混搭相比,使用 JSON 库的优势:

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

使用字符串混搭的优点:

没有。

于 2013-01-25T16:00:02.463 回答
1

使用JSON.stringify.

它是

  • 更标准
  • 更容易阅读:无需检查代码是什么
  • 一定要逃避需要逃避的东西

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

如果支持 IE7 对您很重要,您应该考虑到您需要一个库(请参阅兼容性)。

于 2013-01-25T15:59:27.237 回答
0

它的效率会稍低一些,但会更加标准化。另外,使用stringify将防止诸如注入之类的事情...

于 2013-01-25T16:00:11.180 回答