如何将JavaScript对象的属性转换为JSON格式

28

我正在手动遍历我的JavaScript类的属性以形成JSON,如下所示。这感觉很笨拙,我想学习如何自动地做到这一点,这样如果我添加或删除任何属性,就不必再处理“toJson”函数。

有没有热心人可以指导我如何调整下面的“toJson”函数以实现此目的?

提前感谢您。

/* Using Simple JavaScript Inheritance
* By John Resig http://ejohn.org/
* MIT Licensed.*/
var LogEntry = Class.extend({
    init: function (_conferenceId, _tokenId, _logType, _logValue) {
        this.dato = new Date();
        this.logValue = _logValue;
        this.logType = _logType;
        this.conferenceId = _conferenceId;
        this.tokenId = _tokenId;
    },
    toJson: function () {
        // ?
        var jsonStringBuilder = '{ ';
        jsonStringBuilder += '"dato": ' + this.dato.toString() + ',';
        jsonStringBuilder += '"conferenceId": ' + this.conferenceId + ',';
        if (this.tokenId== null) {
            jsonStringBuilder += '"tokenId":null,';
        }
        else {
            jsonStringBuilder += '"tokenId": ' + _tokenId + ',';
        }
        jsonStringBuilder += '"logValue": ' + this.logValue + ',';
        jsonStringBuilder += '"logType": ' + this.logType;
        jsonStringBuilder += '}';

        return jsonStringBuilder;
        }
});
3个回答

50

我确实尝试过,但是 toJson: function () { return JSON.stringify(this); }返回null。 - Morten Nørgaard
你误解了 toJSON。如果存在,JSON.stringify 调用 对象的 toJSON 方法,然后序列化该函数返回的对象。如果 toJSON 不存在,则 stringify 只是简单地序列化对象。 - josh3736
3
请原谅我。'toJson'是我自己给这个函数起的名字。我知道这可能不太合适... - Morten Nørgaard
非常感谢您的努力和好意,但我恐怕不能以那种方式声明我的对象,因为我已经被锁定在我的(示例)方法中,所以我必须新建这些对象,例如:var logEntry = new LogEntry( /* conference ID / "fsdfa", / token Id / null, / logType / 1, / logValue */ 1); - Morten Nørgaard
即使使用Resig的简单继承库,JSON.stringify也能正常工作 - josh3736
正是我一直在做的事情,但你让它成功了,而我却做不到。感谢你的时间和耐心。 - Morten Nørgaard

7

1
我确实尝试过这样做,但是 toJson: function () { return JSON.stringify(this); }返回null。 - Morten Nørgaard

2

如果你想的话,可以使用stringify。JavaScript也非常酷,它允许你传递上下文抽象,因此你实际上不需要像定义类成员那样去定义。我不知道你的最终目标是什么,但请查看以下内容:

function foo(context) { 
    dosomething(context.bar);
}

您可以使用简单的声明动态添加任意数量的成员,使上下文成为一个类似于此的JSON对象:
context.bar = "hello world";

这样,当您将'context'传递给服务器时,实际上没有必要"stringify"它(假设您的后端框架有某种JSON解析)。

编辑:我有点跑题了,我只是讨厌在JS中看到长字符串的参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接