【问题标题】:How to JSONify a javascript object's properties如何 JSON 化 javascript 对象的属性
【发布时间】:2013-10-07 20:53:40
【问题描述】:

我正在“手动”运行我的 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;
        }
});

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    JSON.stringify 是您要查找的函数。

    一些very old browsers 本身不提供JSON 对象,但您可以为这些浏览器使用a shim library

    【讨论】:

    • 我确实试过了,但是 toJson: function () { return JSON.stringify(this); } 返回 null。
    • 你误会了toJSON。如果存在,JSON.stringify调用对象的toJSON方法,然后序列化函数返回的对象。如果toJSON 不存在,stringify 只需序列化对象。
    • 请见谅。 'toJson' 是我自己选择的函数名称。我认为这是一个糟糕的选择......
    • 太好了,感谢您的努力,但恐怕我不能以这种方式声明我的对象,我被锁定在我的(示例)方式中,所以我必须新建对象,例如var logEntry = new LogEntry( /* 会议ID / "fsdfa", / token Id / null, / logType / 1, / logValue * / 1);
    • 即使使用 Resig 的简单继承库,JSON.stringify works correctly
    【解决方案2】:

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

    【讨论】:

    • 我确实试过了,但是 toJson: function () { return JSON.stringify(this); } 返回 null。
    【解决方案3】:

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

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

    您可以通过简单的声明动态添加任意数量的成员,从而使上下文本质上是这样的 JSON 对象:

    context.bar = "hello world";
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-21
      • 2013-10-28
      • 1970-01-01
      • 2011-08-16
      • 2019-09-15
      • 2019-05-22
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多