node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org ยป

json-object

JSON with extended support for custom objects

Description

This library extends standard JSON support in JavaScript to fully support objects like Date. It does that by using a special format with strings but only when it is needed.

           JSON                  |       JavaScript      |                             Description
---------------------------------+-----------------------+---------------------------------------------------------------------------
 "Hello"                         | "Hello"               | If it doesn't end ")" or doesn't have "(", it can be presented normally
 "Date(s:1287197914000)"         | Date(1287197914000)   | Date object
 "String(Date(s:1287197914000))" | "Date(1287197914000)" | String object
 "UIMessage(OK)"                 | UIMessage(...)        | Custom object
---------------------------------+-----------------------+---------------------------------------------------------------------------

Installation for Node.js

Simplest way to install is to use npm, just simply npm install json-object.

License

MIT-style license, see INSTALL.txt.

Example Code

Before using the library the require('json-object').setup(global[, minimal]) has to be called to setup global objects. If minimal is true, then only minimal changes are done. That means only String.prototype.toJSON is changed.

var json = require('json-object').setup(global);

Encoding as JSON string is done by calling json.stringify() in usual way:

var data = {'date':new Date(),'msg':'Hello World!'};
var str = json.stringify(data);
console.log("str = " + sys.inspect(str));

Parsing is also done by calling json.parse() in standard way:

var parsed_data = json.parse(str);
console.log("parsed_data = " + sys.inspect(parsed_data));

Extending to support your own objects

You can also extend json-object to support your own objects:

// Our custom object
function UIMessage(msg, date) {
	this.msg = "" + msg;
	this.date = date || new Date();
}

// Extend our custom object to support json-object
UIMessage.prototype.toJSON = (function() { return new json.JSONObject('UIMessage', [this.msg, this.date] ); });
json.revivers.UIMessage    = (function(value) { return new UIMessage(value[0], value[1]); });

...and then use it easily:

// Test for the object
var data = new UIMessage("Hello World!");
console.log("data = " + sys.inspect(data));

var str = json.stringify(data);
console.log("str = " + sys.inspect(str));

var parsed_data = json.parse(str);
console.log("parsed_data = " + sys.inspect(parsed_data));