将自定义javascript对象转换为json [重复]

Posted

技术标签:

【中文标题】将自定义javascript对象转换为json [重复]【英文标题】:Convert custom javascript object to json [duplicate] 【发布时间】:2016-07-13 09:34:58 【问题描述】:

我正在尝试将 javascript 中的自定义对象转换为 json 字符串,但我不断收到循环引用错误。有没有办法使用 JSON.stringify 还是我必须自己手动创建字符串?

这是我的代码:

function configuration(comments, instances, connections)

    this.comments = comments;
    this.instances = instances;
    this.connections = connections;

    return this;


function instance(id, type)

    this.id = id;
    this.type = type;

    return this;


function connection(from, to)

    this.from = from;
    this.to = to;

    return this;


function from(id, property, index)

    this.id = id;
    this.property = property;
    this.index = index;

    return this;


function to(id, property, index)

    this.id = id;
    this.property = property;
    this.index = index;

    return this;



var comments = "this is a test comment";
var instances = [];
var connections = [];

connections.push(connection(from("34hvd","inputs", 0), to("dheb3", "outputs", 0)));
instances.push(instance("34vd", "tee"));
instances.push(instance("dheb2", "average"));

var config = configuration(comments, instances, connections);
JSON.stringify(config);

如您所见,我正在尝试对包含注释(字符串)、实例(实例对象数组)和连接(连接对象数组)的配置对象进行字符串化。

如果有更好的方法,请告诉我。谢谢

【问题讨论】:

您应该首先使用new 关键字创建对象实例 请注意,从自定义对象创建的 JSON 不保留对象子类型。当你解析它时,你会得到普通的对象。 JSON 没有任何方式来表示自定义对象类型。 【参考方案1】:

如果调用函数时不使用new,则返回的this 将引用window,这就是创建循环引用的原因。

这会起作用

connections.push(new connection(new from("34hvd","inputs", 0), new to("dheb3", "outputs", 0)));
instances.push(new instance("34vd", "tee"));
instances.push(new instance("dheb2", "average"));

var config = new configuration(comments, instances, connections);
console.log(config)

【讨论】:

非常感谢。那解决了它。抱歉问了个不好的问题...

以上是关于将自定义javascript对象转换为json [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 如何将自定义对象数组转换为 JSON

使用javascript将自定义json对象复制到剪贴板

如何将自定义 json 转换为自适应卡片 json 格式

如何将自定义属性转换为 Json 字符串

Typescript/Angular 12:将自定义对象转换为参数对象

将自定义对象转换为 NSData 以与 NSFileManager 一起使用