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

将JSON字符串解析为JavaScript中的特定对象原型

堵飞鸿
2023-03-14
问题内容

我知道如何解析JSON字符串并将其转换为JavaScript对象。您可以JSON.parse()在现代浏览器(和IE9 +)中使用。

太好了,但是我怎样才能把那个JavaScript对象变成一个 特定的 JavaScript对象(即带有特定的原型)呢?

例如,假设您有:

function Foo()
{
   this.a = 3;
   this.b = 2;
   this.test = function() {return this.a*this.b;};
}
var fooObj = new Foo();
alert(fooObj.test() ); //Prints 6
var fooJSON = JSON.parse({"a":4, "b": 3});
//Something to convert fooJSON into a Foo Object
//....... (this is what I am missing)
alert(fooJSON.test() ); //Prints 12

再次说明,我不奇怪如何将JSON字符串转换为通用JavaScript对象。我想知道如何将JSON字符串转换为“
Foo”对象。也就是说,我的对象现在应该具有函数“ test”以及属性“ a”和“ b”。

更新 经过一些研究,我想到了这个…

Object.cast = function cast(rawObj, constructor)
{
    var obj = new constructor();
    for(var i in rawObj)
        obj[i] = rawObj[i];
    return obj;
}
var fooJSON = Object.cast({"a":4, "b": 3}, Foo);

那行得通吗?

更新2017年5月 :通过的“现代”方式Object.assign,但是IE
11或更旧的Android浏览器中不提供此功能


问题答案:

当前的答案包含很多手动或库代码。这不是必需的。

  1. 使用JSON.parse('{"a":1}')创建一个普通的对象。

  2. 使用标准化功能之一来设置原型:

    • Object.assign(new Foo, { a: 1 })
    • Object.setPrototypeOf({ a: 1 }, Foo.prototype)


 类似资料:
  • 问题内容: 我有一个.NET中的SOAP Web服务返回的JSON字符串。如下: 现在,我想将此字符串解析为JSON对象。我也看了这个,他们已经用这行代码: 所以我可以通过用我的字符串名称替换“ json”来做到这一点。还需要引用除NewtonSoft.dll以外的任何其他dll吗? 顺便说一句,这是完整的网络服务代码 问题答案: 用 您需要System.Web.Extensions dll并导入

  • 问题内容: 我想将Javascript对象编码为JSON字符串,但遇到了很多困难。 对象看起来像这样 我想将其放入JSON字符串以将其放入ajax请求中。 你明白了。不管我做什么,都行不通。所有JSON编码器(如json2等)都会产生 好吧,那对我没有帮助。基本上我想拥有类似php 函数的功能。 问题答案: 除非定义了变量,否则可能是造成您麻烦的原因。这样的事情会做你想要的: 您也可以一次完成所有

  • 我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。 当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。 现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找

  • 问题内容: 我想转换这个字符串 到2个JSON对象的数组。我该怎么办? 最好 问题答案: 使用jQuery: 是您的JSON对象。

  • 服务器js 使用body parser中间件、把手和express 路线 客户 当记录我得到一个JSON字符串 {'{"满意":"文本1","改进":"文本2","评级":0.7}': '' } 我试着把这个字符串解析成一个对象。当我这样做时,我会收到这个错误消息 那么如何将字符串解析为对象呢? 通常我会执行。

  • 问题内容: 我有这个JavaScript原型: 然后创建一个新对象: 如果我做: 结果是: 但我需要将对象的类型包含在JSON字符串中,如下所示: 有没有使用框架之类的方法来执行此操作的快速方法?还是我需要在类中实现一个方法并手动执行? 问题答案: 编辑: 将字符串化 所有类的 “属性”。如果只想保留其中一些,则可以这样分别指定: