Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pigulla/json-strictify
Safely serialize a value to JSON without unintended loss of data or going into an infinite loop due to circular references.
https://github.com/pigulla/json-strictify
javascript json serialization
Last synced: 11 days ago
JSON representation
Safely serialize a value to JSON without unintended loss of data or going into an infinite loop due to circular references.
- Host: GitHub
- URL: https://github.com/pigulla/json-strictify
- Owner: pigulla
- License: mit
- Created: 2014-09-17T06:19:03.000Z (about 10 years ago)
- Default Branch: main
- Last Pushed: 2024-10-21T09:24:41.000Z (18 days ago)
- Last Synced: 2024-10-21T13:24:05.544Z (18 days ago)
- Topics: javascript, json, serialization
- Language: TypeScript
- Homepage:
- Size: 2.44 MB
- Stars: 19
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nodejs-cn - json-strictify - 安全地将值序列化为 JSON ,不丢失数据或进入无限循环 (包 / 其他)
- awesome-nodejs - json-strictify - Safely serialize a value to JSON without data loss or going into an infinite loop. (Packages / Miscellaneous)
- awesome-node - json-strictify - Safely serialize a value to JSON without data loss or going into an infinite loop. (Packages / Miscellaneous)
- awesome-nodejs-cn - json-strictify - 安全地将值序列化为JSON而不丢失数据或进入无限循环. (目录 / 其他)
- awesome-nodejs - json-strictify - Safely serialize a value to JSON without unintended loss of data or going into an infinite loop due to circular references. - ★ 3 (Miscellaneous)
- awesome-nodejs-cn - json-strictify - **star:19** 安全地将值序列化为JSON,而不会丢失数据或进入无限循环 (包 / 杂项)
README
![Typescript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-blue.svg?style=flat-square)
[![npm](https://img.shields.io/npm/v/json-strictify?style=flat-square&cacheSeconds=3600)](https://www.npmjs.com/package/json-strictify)
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/pigulla/json-strictify/build-and-test.yml?style=flat-square)
[![GitHub Issues](https://img.shields.io/github/issues-raw/pigulla/json-strictify?style=flat-square&cacheSeconds=3600)](https://github.com/pigulla/json-strictify/issues)
[![libraries.io](https://img.shields.io/librariesio/release/npm/json-strictify?style=flat-square&cacheSeconds=3600)](https://libraries.io/npm/json-strictify)
[![Codecov](https://img.shields.io/codecov/c/github/pigulla/json-strictify?style=flat-square&cacheSeconds=3600)](https://app.codecov.io/gh/pigulla/json-strictify)
[![npm bundle size](https://img.shields.io/bundlephobia/min/json-strictify?style=flat-square&cacheSeconds=3600)](https://bundlephobia.com/package/json-strictify)# json-strictify
> Safely serialize a value to JSON without unintended loss of data or going into an infinite loop due to circular references.
#### Why
The native [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) function drops or silently modifies all values that are not supported by the [JSON specification](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf):
```js
JSON.stringify({ a: 42, b: undefined })
// returns '{"a":42}'JSON.parse(JSON.stringify(NaN))
// returns nullJSON.stringify([1, NaN, 3])
// returns '[1,null,3]'
```In many cases this is not the behaviour you want: relying on the serialization method to clean up your data is error prone and can lead to subtle bugs that are annoying to find. json-strictify helps you to easily avoid these issues with literally a single line of code.
Unlike [`json-stringify-safe`](https://www.npmjs.org/package/json-stringify-safe) it does not attempt to "fix" its input but always bails out when it encounters something that would prevent it from being serialized properly.
---
### Installation
Simply install via npm:
```
npm install json-strictify
```### Usage
json-strictify exposes three methods: `stringify`, `parse` and `enable`, so it can be used as a drop-in replacement for the native JSON object:
```typescript
import JSON from 'json-strictify'JSON.stringify(someObject)
```The `parse` method is simply a reference to the native `JSON.parse` function.
---
### Examples
The `stringify` function throws an error if the input to be serialized contains invalid values:
```typescript
import JSONs from 'json-strictify'JSONs.stringify({ x: 42, y: NaN })
// InvalidValueError: Invalid value at /y (NaN is not JSON-serializable)
```Also, if the data you want to stringify contains circular references a `CircularReferenceError` is thrown:
```typescript
const data = []
data.push(data)
JSONs.stringify(data)
// CircularReferenceError: Circular reference found at "/0"
```The location of the value that caused the error is given as a [JSON Pointer](http://tools.ietf.org/html/rfc6901) reference.
---
### ESLint integration
If you want to ensure that all serialization is done through json-strictify you can disable the global `JSON` variable like so:
```json
"globals": {
"JSON": "off"
}
```See the ESLint documentation on [configuring globals](https://eslint.org/docs/user-guide/configuring#specifying-globals) for details.
---
### Disabling json-strictify
In production you may not want to have the additional overhead introduced by json-strictify. This can easily be avoided by calling the `enabled` method:
```typescript
import JSONs from 'json-strictify'
const JSON = JSONs.enabled(config.debug)// or for older versions of Javascript:
const JSON = require('json-strictify').enabled(config.debug)
```If called with a falsy parameter, `enabled` will return an object that delegates directly to the native JSON object so there will be no performance penalty whatsoever.
**Note:** json-strictify is disabled by default if `NODE_ENV` is set to `production` (you may still enable it manually, of course).