在JSON结果中定义函数是否有效?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

网站的JSON响应的一部分有(...添加了上下文):

{..., now:function(){return(new Date).getTime()}, ...}

是否向JSON添加匿名函数有效?我希望每次访问“时间”时都会返回不同的值。

提问于
用户回答回答于

没有。

JSON纯粹是一种数据描述语言。如http://www.json.org所述,它是一种“轻量级数据交换格式”。 - 不是一种编程语言。

根据http://en.wikipedia.org/wiki/JSON,支持的“基本类型”是:

  • 数字(整数,实数或浮点数)
  • 字符串(双引号Unicode,带反斜杠转义)
  • 布尔(真假)
  • 数组(一个有序的值序列,用逗号分隔并用方括号括起来)
  • 对象(key:value对的集合,用逗号分隔并用大括号括起来)
  • null
用户回答回答于

问题在于作为数据定义语言的JSON是作为JavaScript对象表示法从JSON演化而来的。由于Javascript在JSON上支持eval,因此将JSON代码放入JSON中是合法的(在该用例中)。如果您使用JSON来远程传递数据,那么我认为将方法放入JSON是一种不好的做法,因为您可能没有很好地模拟客户端与服务器之间的交互。此外,当希望使用JSON作为数据描述语言时,我会说你可能会因为嵌入方法而陷入麻烦,因为一些JSON解析器只考虑了数据描述,并且可能不支持结构中的方法定义。

维基百科JSON条目是一个不包括JSON方法的好例子,它引用了安全性问题:

除非绝对相信文本的来源,并且需要解析和接受不严格符合JSON的文本,否则应该避免使用eval(),而应使用JSON.parse()或其他特定于JSON的解析器。JSON解析器只会识别JSON文本,并会拒绝其他可能包含恶意JavaScript的文本。在提供本机JSON支持的浏览器中,JSON解析器也比eval快得多。预计本地JSON支持将包含在下一个ECMAScript标准中。

扫码关注云+社区