json-bourne
v1.0.1
Published
Drop in replacement for JSON that standardizes Array.toJSON and Date.toJSON
Downloads
2,940
Readme
Normalizes the JavaScript JSON API against overwritten Array.prototype.toJSON
and IE8's unstandardized version of Date.prototype.toJSON
.
Advantages over JSON 3
- Much smaller, only a few lines rather than 4KB
- Uses native stringify and parse methods
- Runs much quicker on older browsers
Known issues
- Does not protect against all monkeypatching
- Can be slower at stringifying on newer browsers (see Benchmarks)
- Not compatible with IE7 or below
Installation
$ npm install --save json-bourne
Motivation
JSON Bourne is intended for use in code that you'll execute on websites you don't control. Such websites can break the native JSON.stringify
implementation by changing Array.prototype.toJSON
, specifically if they use prototype.js version 1.6 or under. JSON Bourne also normalizes Date.prototype.toJSON
, correcting the unstandard implementation for IE8. Any changes to prototypes are restored immediately after stringifying.
Usage
JSON Bourne is a drop in replacement for JSON, replicating the standard parse
and stringify
methods exactly.
var JSON = require('json-bourne')
console.log(JSON.parse('{"bourne": "legacy"}'))
// Logs { bourne: "legacy" }
console.log(JSON.stringify({"bourne": "ultimatum"}))
// Logs { "bourne": "ultimatum" }
Compatibility
Tested on IE8+, Chrome, Firefox, Opera and Safari.
Benchmarks
Want to work on this for your day job?
This project was created by the Engineering team at Qubit. As we use open source libraries, we make our projects public where possible.
We’re currently looking to grow our team, so if you’re a JavaScript engineer and keen on ES2016 React+Redux applications and Node micro services, why not get in touch? Work with like minded engineers in an environment that has fantastic perks, including an annual ski trip, yoga, a competitive foosball league, and copious amounts of yogurt.
Find more details on our Engineering site. Don’t have an up to date CV? Just link us your Github profile! Better yet, send us a pull request that improves this project.