29

我正在对我的 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;
        }
});
4

3 回答 3

51

JSON.stringify是您正在寻找的功能。

一些非常老的浏览器本身并不提供该JSON对象,但您可以为这些浏览器使用shim 库。

于 2013-10-07T20:55:06.767 回答
7

我想你正在寻找JSON.stringify().

于 2013-10-07T20:55:24.067 回答
2

如果需要,可以使用 stringify。Javascript 也非常酷,它允许你传递上下文摘要,所以你真的不需要像你一样定义类成员。我不知道你的最终目标是什么,但检查一下:

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

您可以使用简单的声明动态添加任意数量的成员,从而使 context 本质上是一个 JSON 对象,如下所示:

context.bar = "hello world";

这样,当您将“上下文”传递给服务器时,就不需要对其进行“字符串化”(假设您的后端框架具有某种 JSON 解析)。

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

于 2013-10-07T21:01:56.603 回答