Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
JSON serializer that handles Dates, RegExps, Functions or any other type you want
JavaScript
branch: master
Failed to load latest commit information.
lib Implemented simple function serializater
test Implemented simple function serializater
.gitignore Added tests for builtin serializers
.npmignore
Makefile Release v0.0.1
README.md Updated README
package.json Release v0.0.2

README.md

super-json

Library that provides JSON serialization of javascript objects not supported natively by JSON such as Dates, RegExps, Functions or any other user-defined class instance.

Installation

npm install super-json

Usage

// Nodejs
> var superJson = require('super-json');

// Browser
> var superJson = window.superJson;

> var myJson = superJson.create({
...  magic: '#!',
...  serializers: [
...    superJson.dateSerializer,
...    superJson.regExpSerializer,
...    superJson.functionSerializer
...  ]
...});

// or just
> var myJson = superJson.create(); // The above options are defaults.

> myJson.stringify({birth: new Date(0), someRegex: /abc/gi}); 
'{"birth":"#!Date[0]","someRegex":"#!RegExp[\\"abc\\",\\"gi\\"]"}'

> myJson.parse(myJson.stringify({birth: new Date(0), someRegex: /abc/gi})) 
{ birth: Wed Dec 31 1969 21:00:00 GMT-0300 (BRT),
  someRegex: /abc/gi }

It is possible to use 'myJson' as a drop-in replacement for the global JSON object, but if the replacer/reviver arguments are used the custom serialization will not work.

Implementation

This is implemented using the replacer/reviver arguments, and serializes custom types to a string that looks like this: {magic}{serializer name}{json array containing constructor arguments}. The magic string is escaped when serializing strings, so user input doesn't need to be validated.

Customize serialization

Just pass an object that looks like this(example from the date serializer):

dateSerializer = {
  serialize: function(date) {
    return [date.getTime()];
  },
  deserialize: function(time) {
    return new Date(time);
  },
  isInstance: function(obj) {
    return obj instanceof Date;
  },
  name: 'Date'
}
Something went wrong with that request. Please try again.