knockoutjs - Serialización knockout con ko.toJSON: cómo ignorar las propiedades que son nulas
knockoutjs com foreach (2)
Cuando usas:
var dataToSave = ko.toJSON(myViewModel);
.. ¿Es posible no serializar valores que son nulos?
Serializar mi viewModel actual crea alrededor de 500Kb de JSON, la mayoría de los cuales terminan como:
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property3": null,
"Property4": null,
"Property5": null,
"Property6": null,
"Property7": null,
"Property8": null,
"Property9": false
}
Si pudiera hacer que el serializador ignorara los valores nulos, esto podría reducirse a:
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property9": false
}
¿Alguna idea de cómo puedo ordenar al serializador que ignore los valores nulos?
Puede agregar un método toJSON a su modelo de vista y usarlo para eliminar todas las propiedades innecesarias:
ViewModel.prototype.toJSON = function() {
var copy = ko.toJS(this);
// remove any unneeded properties
if (copy.unneedProperty == null) {
delete copy.unneedProperty;
}
return copy;
}
Probablemente podría automatizarlo para ejecutar todas sus propiedades y eliminar las nulas.
Recuerde que ko.toJSON es solo una modificación de JSON stringify . Puede pasar en una función de reemplazo .
Como ejemplo de uso de una función de reemplazo en Knockout, JSFiddle un JSFiddle basado en uno de los tutoriales de eliminación directa . Observe la diferencia entre las funciones makeJson
y makeCleanJson
. Podemos elegir no devolver ningún valor en nuestra función de reemplazo y el elemento se omitirá en la cadena 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;
}
}));
};