json-cyclic

1.0.2 • Public • Published

JSON Cyclic

CircleCI

A small JavaScript library to replace circular references in object literals with JSONPath references, so that the data can be stringified as JSON.

It also supports re-inserting the circular data after the JSON has been parsed.

This will fix the below TypeErrors:

Chrome: "TypeError: Converting circular structure to JSON"
Firefox: "TypeError: cyclic object value"
Edge: "TypeError: Circular reference in value argument not supported"
Safari: "TypeError: JSON.stringify cannot serialize cyclic structures."

Features

  • Accepts Arrays, Objects, or both in combination
  • Works with >IE8
  • Tiny (~1kB minified)
  • No dependencies

Installation

npm install json-cyclic

Usage

// ES2015
import { encycle, decycle } from "json-cyclic"
 
// CommonJS
const JSONCyclic = require("json-cyclic") 

API

There are only two methods exposed, and neither require any configuration:

decycle

Removes any circular data structures.

See the below usage examples:

// Arrays
const arr= [1, "a"]
 
arr[2] = arr;
 
JSON.stringify(decycle(arr)); // "{"foo":{"bar":{"$ref":"$.foo"}}}"
 
// Objects
const obj = { foo: { bar: null } };
 
obj.foo.bar = obj.foo;
 
JSON.stringify(decycle(obj)); // "{"foo":{"bar":{"$ref":"$.foo"}}}"

encycle

Re-inserts any circular data.

See the below:

const arr = [1, "a", { $ref: "$" }]
 
encycle(arr)
 
console.log(arr[2] === arr) // true
 
JSON.stringify(encycle(arr)); // TypeError: Converting circular structure to JSON

Tests

npm test

Package Sidebar

Install

npm i json-cyclic

Weekly Downloads

2,509

Version

1.0.2

License

MIT

Unpacked Size

24.5 kB

Total Files

10

Last publish

Collaborators

  • thegreatercurve