observablearray knockoutjs knockout for data json serialization knockout.js knockout-2.0

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; } })); };