Files
30-seconds-of-code/snippets/js/s/stringify-circular-json.md
2023-05-10 22:35:09 +03:00

34 lines
942 B
Markdown

---
title: Stringify circular JSON
type: snippet
language: javascript
tags: [object]
cover: waving-over-lake
dateModified: 2020-10-22T20:24:30+03:00
---
Serializes a JSON object containing circular references into a JSON format.
- Create a `WeakSet` to store and check seen values, using `WeakSet.prototype.add()` and `WeakSet.prototype.has()`.
- Use `JSON.stringify()` with a custom replacer function that omits values already in `seen`, adding new values as necessary.
- ⚠️ **NOTICE:** This function finds and removes circular references, which causes circular data loss in the serialized JSON.
```js
const stringifyCircularJSON = obj => {
const seen = new WeakSet();
return JSON.stringify(obj, (k, v) => {
if (v !== null && typeof v === 'object') {
if (seen.has(v)) return;
seen.add(v);
}
return v;
});
};
```
```js
const obj = { n: 42 };
obj.obj = obj;
stringifyCircularJSON(obj); // '{"n": 42}'
```