Best way to serialize/unserialize objects in JavaScript?

前端 未结 8 1426
忘掉有多难
忘掉有多难 2020-11-27 13:53

I have many JavaScript objects in my application, something like:

function Person(age) {
    this.age = age;
    this.isOld = function (){
        return thi         


        
8条回答
  •  悲&欢浪女
    2020-11-27 13:59

    I wrote serialijse because I faced the same problem as you.

    you can find it at https://github.com/erossignon/serialijse

    It can be used in nodejs or in a browser and can serve to serialize and deserialize a complex set of objects from one context (nodejs) to the other (browser) or vice-versa.

    var s = require("serialijse");
    
    
    var assert = require("assert");
    
    
    // testing serialization of a simple javascript object with date
    function testing_javascript_serialization_object_with_date() {
    
        var o = {
            date: new Date(),
            name: "foo"
        };
        console.log(o.name, o.date.toISOString());
    
        // JSON will fail as JSON doesn't preserve dates
        try {
            var jstr = JSON.stringify(o);
            var jo = JSON.parse(jstr);
            console.log(jo.name, jo.date.toISOString());
        } catch (err) {
            console.log(" JSON has failed to preserve Date during stringify/parse ");
            console.log("  and has generated the following error message", err.message);
        }
        console.log("");
    
    
    
        var str = s.serialize(o);
        var so = s.deserialize(str);
        console.log(" However Serialijse knows how to preserve date during serialization/deserialization :");
        console.log(so.name, so.date.toISOString());
        console.log("");
    }
    testing_javascript_serialization_object_with_date();
    
    
    // serializing a instance of a class
    function testing_javascript_serialization_instance_of_a_class() {
    
        function Person() {
            this.firstName = "Joe";
            this.lastName = "Doe";
            this.age = 42;
        }
    
        Person.prototype.fullName = function () {
            return this.firstName + " " + this.lastName;
        };
    
    
        // testing serialization using  JSON.stringify/JSON.parse
        var o = new Person();
        console.log(o.fullName(), " age=", o.age);
    
        try {
            var jstr = JSON.stringify(o);
            var jo = JSON.parse(jstr);
            console.log(jo.fullName(), " age=", jo.age);
    
        } catch (err) {
            console.log(" JSON has failed to preserve the object class ");
            console.log("  and has generated the following error message", err.message);
        }
        console.log("");
    
        // now testing serialization using serialijse  serialize/deserialize
        s.declarePersistable(Person);
        var str = s.serialize(o);
        var so = s.deserialize(str);
    
        console.log(" However Serialijse knows how to preserve object classes serialization/deserialization :");
        console.log(so.fullName(), " age=", so.age);
    }
    testing_javascript_serialization_instance_of_a_class();
    
    
    // serializing an object with cyclic dependencies
    function testing_javascript_serialization_objects_with_cyclic_dependencies() {
    
        var Mary = { name: "Mary", friends: [] };
        var Bob = { name: "Bob", friends: [] };
    
        Mary.friends.push(Bob);
        Bob.friends.push(Mary);
    
        var group = [ Mary, Bob];
        console.log(group);
    
        // testing serialization using  JSON.stringify/JSON.parse
        try {
            var jstr = JSON.stringify(group);
            var jo = JSON.parse(jstr);
            console.log(jo);
    
        } catch (err) {
            console.log(" JSON has failed to manage object with cyclic deps");
            console.log("  and has generated the following error message", err.message);
        }
    
        // now testing serialization using serialijse  serialize/deserialize
        var str = s.serialize(group);
        var so = s.deserialize(str);
        console.log(" However Serialijse knows to manage object with cyclic deps !");
        console.log(so);
        assert(so[0].friends[0] == so[1]); // Mary's friend is Bob
    }
    testing_javascript_serialization_objects_with_cyclic_dependencies();
    

提交回复
热议问题