一尘不染

使用ko.toJSON进行淘汰赛序列化-如何忽略为空的属性

json

使用时:

var dataToSave = ko.toJSON(myViewModel);

..是否可以 序列化为null的值?

序列化我当前的viewModel可以创建大约500Kb的JSON,其中的大多数结果如下:

"SomeObject": {
    "Property1": 12345,
    "Property2": "Sometext",
    "Property3": null,
    "Property4": null,
    "Property5": null,
    "Property6": null,
    "Property7": null,
    "Property8": null,
    "Property9": false
}

如果我可以让序列化程序忽略空值,则可以将其简化为:

"SomeObject": {
    "Property1": 12345,
    "Property2": "Sometext",
    "Property9": false
}

有什么想法可以指示序列化程序忽略空值吗?


阅读 216

收藏
2020-07-27

共1个答案

一尘不染

请记住,ko.toJSON只是JSON
stringify
的修改。您可以传入一个replacer函数

作为在Knockout中使用替换函数的示例,我根据一个淘汰赛教程整理了一个JSFiddle。注意makeJsonmakeCleanJson函数之间的区别。我们可以选择在我们的replacer函数中不返回任何值,并且该项目将在JSON字符串中被跳过。

self.makeJson = function() {
    self.JsonInfo(ko.toJSON(self.availableMeals));
};

self.makeCleanJson = function() {
    self.JsonInfo(ko.toJSON(self.availableMeals, function(key, value) {
        if (value == null)
        {
            return;
        }
        else
        {
            return value;
        }
    }));
};
2020-07-27