Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
The json3 npm package is a modern JSON implementation that provides a robust and consistent API for parsing and stringifying JSON data. It is designed to be a drop-in replacement for the native JSON object, offering improved performance and better handling of edge cases.
Parsing JSON
This feature allows you to parse a JSON string into a JavaScript object. The code sample demonstrates how to use JSON3 to parse a JSON string.
const JSON3 = require('json3');
const jsonString = '{"name":"John", "age":30, "city":"New York"}';
const jsonObject = JSON3.parse(jsonString);
console.log(jsonObject);
Stringifying JSON
This feature allows you to convert a JavaScript object into a JSON string. The code sample demonstrates how to use JSON3 to stringify a JavaScript object.
const JSON3 = require('json3');
const jsonObject = { name: "John", age: 30, city: "New York" };
const jsonString = JSON3.stringify(jsonObject);
console.log(jsonString);
Custom Replacer Function
This feature allows you to use a custom replacer function when stringifying a JavaScript object. The code sample demonstrates how to exclude numbers from the JSON string.
const JSON3 = require('json3');
const jsonObject = { name: "John", age: 30, city: "New York" };
const jsonString = JSON3.stringify(jsonObject, (key, value) => {
if (typeof value === 'number') {
return undefined; // Exclude numbers
}
return value;
});
console.log(jsonString);
Custom Space Argument
This feature allows you to format the JSON string with a custom space argument for better readability. The code sample demonstrates how to use a space argument to format the JSON string with indentation.
const JSON3 = require('json3');
const jsonObject = { name: "John", age: 30, city: "New York" };
const jsonString = JSON3.stringify(jsonObject, null, 2);
console.log(jsonString);
JSON5 is an extension of JSON that aims to make it easier for humans to write and maintain. It allows for comments, trailing commas, and more relaxed syntax rules. Compared to json3, JSON5 offers more flexibility in the JSON format but may not be as performant.
fast-json-stringify is a package designed for high-performance JSON stringification. It uses a schema-based approach to optimize the stringification process. Compared to json3, fast-json-stringify is focused on performance and may be more suitable for applications requiring high-speed JSON operations.
circular-json is a package that allows for the serialization of objects containing circular references. It provides a safe way to stringify and parse objects with circular references. Compared to json3, circular-json offers specialized functionality for handling circular references, which json3 does not natively support.
JSON 3 is **deprecated** and **no longer maintained**. Please don't use it in new projects, and migrate existing projects to use the native `JSON.parse` and `JSON.stringify` instead.
Thanks to everyone who contributed patches or found it useful! ❤️
JSON 3 was a JSON polyfill for older JavaScript platforms.
JSON is a language-independent data interchange format based on a loose subset of the JavaScript grammar. Originally popularized by Douglas Crockford, the format was standardized in the fifth edition of the ECMAScript specification. The 5.1 edition, ratified in June 2011, incorporates several modifications to the grammar pertaining to the serialization of dates.
JSON 3 exposes two functions: stringify()
for serializing a JavaScript value to JSON, and parse()
for producing a JavaScript value from a JSON source string. The JSON 3 parser uses recursive descent instead of eval
and regular expressions, which makes it slower on older platforms compared to JSON 2. The functions behave exactly as described in the ECMAScript spec, except for the date serialization discrepancy noted below.
The project is hosted on GitHub, along with the unit tests. It is part of the BestieJS family, a collection of best-in-class JavaScript libraries that promote cross-platform support, specification precedents, unit testing, and plenty of documentation.
JSON 3 deviates from the specification in one important way: it does not define Date#toISOString()
or Date#toJSON()
. This preserves CommonJS compatibility and avoids polluting native prototypes. Instead, date serialization is performed internally by the stringify()
implementation: if a date object does not define a custom toJSON()
method, it is serialized as a simplified ISO 8601 date-time string.
Several native Date#toJSON()
implementations produce date time strings that do not conform to the grammar outlined in the spec. In these environments, JSON 3 will override the native stringify()
implementation. There is an issue on file to make these tests less strict.
Portions of the date serialization code are adapted from the date-shim
project.
<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js"></script>
<script>
JSON.stringify({"Hello": 123});
// => '{"Hello":123}'
JSON.parse("[[1, 2, 3], 1, 2, 3, 4]", function (key, value) {
if (typeof value == "number") {
value = value % 2 ? "Odd" : "Even";
}
return value;
});
// => [["Odd", "Even", "Odd"], "Odd", "Even", "Odd", "Even"]
</script>
When used in a web browser, JSON 3 exposes an additional JSON3
object containing the noConflict()
and runInContext()
functions, as well as aliases to the stringify()
and parse()
functions.
noConflict
and runInContext
JSON3.noConflict()
restores the original value of the global JSON
object and returns a reference to the JSON3
object.JSON3.runInContext([context, exports])
initializes JSON 3 using the given context
object (e.g., window
, global
, etc.), or the global object if omitted. If an exports
object is specified, the stringify()
, parse()
, and runInContext()
functions will be attached to it instead of a new object.JSON 3 is defined as an anonymous module for compatibility with RequireJS, curl.js
, and other asynchronous module loaders.
<script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.js"></script>
<script>
require({
"paths": {
"json3": "./path/to/json3"
}
}, ["json3"], function (JSON) {
JSON.parse("[1, 2, 3]");
// => [1, 2, 3]
});
</script>
To avoid issues with third-party scripts, JSON 3 is exported to the global scope even when used with a module loader. If this behavior is undesired, JSON3.noConflict()
can be used to restore the global JSON
object to its original value.
Note: If you intend to use JSON3 alongside another module, please do not simply concatenate these modules together, as that would cause multiple define
calls in one script, resulting in errors in AMD loaders. The r.js
build optimizer can be used instead if you need a single compressed file for production.
var JSON3 = require("./path/to/json3");
JSON3.parse("[1, 2, 3]");
// => [1, 2, 3]
load("path/to/json3.js");
JSON.stringify({"Hello": 123, "Good-bye": 456}, ["Hello"], "\t");
// => '{\n\t"Hello": 123\n}'
JSON 3 has been tested with the following web browsers, CommonJS environments, and JavaScript engines.
arguments
object may produce inconsistent results across environments due to specification version differences. As a workaround, please convert the arguments
object to an array first: JSON.stringify([].slice.call(arguments, 0))
.JSON 3 assumes that the following methods exist and function as described in the ECMAScript specification:
Number
, String
, Array
, Object
, Date
, SyntaxError
, and TypeError
constructors.String.fromCharCode
Object#toString
Object#hasOwnProperty
Function#call
Math.floor
Number#toString
Date#valueOf
String.prototype
: indexOf
, charCodeAt
, charAt
, slice
, replace
.Array.prototype
: push
, pop
, join
.FAQs
A JSON polyfill for older JavaScript platforms.
The npm package json3 receives a total of 2,907,861 weekly downloads. As such, json3 popularity was classified as popular.
We found that json3 demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.