gpt4 book ai didi

javascript - 在 Javascript 中反序列化多态 JSON

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:20 24 4
gpt4 key购买 nike

我的客户端代码从服务器获取一个 JSON“对象”,然后对其进行解析。解析后的对象包含一个“type”属性,它应该控制对象的类。

$.getJSON("foo.json").done(function(data, textStatus, xhr) {
$.each(data.objects, function(key, val)
{
if (val.type = "A") // make val into an object of class A, somehow?
...
else if (val.type = "B") // make val into an object of class B somehow?
... etc...
}
}

如何在不明确复制每个属性的情况下创建正确类型的 JavaScript 对象,或者 - 或者 - 将已解析的对象转换为不同的类型?

我已经阅读了一些关于 __proto__ 的内容,但感觉它是一个大锤子,但应该是一个小坚果......

我见过关于 Java 和 Jackson 的类似问题,但没有关于 Javascript 的问题......

最佳答案

你可以这样做

function ObjectFactory() {
this.newInstance = function(val) {
if (val.type == "A") return new A(val);
if (val.type == "B") return new B(val);
}
}
function A(data) {
// do something with the data
this.property = data.property;
}

function B(data) {
// do something with the data
this.property = data.property;
this.bSpecificProperty = data.bSpecificProperty;
}

$.getJSON("foo.json").done(function(data, textStatus, xhr) {
var objectFactory = new ObjectFactory();
var objects = $.map(data.objects, objectFactory.newInstance);

console.log(objects);
}

如果您提供了一个更好的示例来说明什么是正确的类型,以及一些示例数据,我可以提供更好的答案。

关于javascript - 在 Javascript 中反序列化多态 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24595471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com