当前位置: 首页 > 面试题库 >

JSON使用功能参数序列化对象

戚鸿福
2023-03-14
问题内容

我有这个C#对象:

var obj = new {
    username = "andrey",
    callback = "function(self) { return function() {self.doSomething()} (this) }"
}

我需要对其进行JSON序列化以在ajax调用中传递给浏览器。我使用JavascriptSerializer,但是它序列化为以下JSON:

{"username":"andrey", "callback": "function(self) { return function() {self.doSomething()} (this) }"}

但我需要的是:

{"username":"andrey", "callback": function(self) { return function() {self.doSomething()} (this) }}
  • 函数定义周围没有引号。

现在,当JSON对象到达浏览器并被创建时,“ callback”参数不是函数而是字符串。任何想法如何解决它,最好是在服务器端?


问题答案:

此行为是故意的。JSON不应包含任何非数据的内容-
在您的情况下为可执行函数。如果数据能够以JSON格式从服务器返回,则该浏览器将面临巨大的安全风险,该JSON格式在执行时将运行任意功能(可以窃取信息,将用户重定向到恶意站点等)。

JSON的早期实现依赖这样一个事实,即返回的数据可以简单地通过eval()执行以获取对象。但是,人们几乎 立即
意识到这带来了巨大的安全风险,并且此后一直在设法加以解决。这就是为什么在标准化JSON对象之前,人们停止将原始JSON数据放入eval()并使用JSON解析库的原因。

JSON对象将始终仅将对象序列化为数据。这是设计使然。标准化JSON格式无法表示可执行函数。

现在,您可以通过将回调传递给eval()轻松地将其在浏览器上转换为函数。但是, 请不要这样做 。您只是在为黑客开放自己。

服务器端,现代浏览器旨在防止发生这种确切的事情,即从包含可执行功能的浏览器发送数据。



 类似资料:
  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非

  • 问题内容: 我正在尝试将一些JSON数据反序列化为应用程序的对象。到现在为止还不错,因为JSON数据上的属性是静态的(带有值的键)。现在,我得到了一个结果,其中的关键是动态数据。 这是一个示例JSON网址: http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info 由此产生的JSON是: 好的

  • 问题内容: 我的JSON有点弱,所以我需要一些帮助。 我正在尝试反序列化用户的JSON: 放入我用属性装饰的对象中: 我得到以下异常: Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需的属性’user_id’。 这是因为JSON对象是一个数组吗?如果是这样,如何将其反序列化为一个User对象? 提前致谢! 问题答案: 正如Alexandr

  • 问题内容: 我想使用simplejson序列化Django模型。Django的序列化器不支持字典…,而simplejson不支持Django Querysets。这是一个难题。 在该模型中,有一个具有“外键”赞助商级别的赞助商,我试图将属于某个赞助商级别的所有赞助商分组在一起。这是生成列表的代码: 这是“制造”后的样子 我只在每个级别添加了一个赞助商,除了铜牌,只是为了展示其工作原理。我要做的就是

  • 当我试图使用Gson库反序列化JSON对象数组时,我遇到了一个问题。 JSON数组的一个示例: 你怎么认为?反序列化这种JSON响应的正确Java代码是什么?

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。