TypeError: 循環構造を JSON に変換しています
JSON.stringify()
関数への循環参照を含むオブジェクトを送信すると、TypeError: Converting circle structure to JSON
問題が発生します。 オブジェクトを JSON に変換する前に、循環参照を避けてください。
JavaScript の TypeError: 循環構造を JSON に変換する
を修正
この問題は、flatted
パッケージ を使用して解決できます。 flatted
パッケージは、CircularJSON
の発明者から直接提供された、信じられないほど軽量で高速な Circular JSON パーサーです。
まず、flatted
パッケージをインストールする必要があります。次の方法でインストールできます。
npm i flatted
flatted
パッケージの使用例を見てみましょう。
const {parse, stringify} = require('flatted/cjs');
var sports = [{cricket: 1}, {football: '2'}];
sports[0].a = sports;
stringify(sports);
console.log(sports);
出力:
JSON.stringify()
は、有効なオブジェクトを文字列に変換するだけでなく、関数が構成されている場合に値を置き換える可能性のある置換パラメーターも備えています。
let sportsmanObj = {
name: 'Shiv',
age: 22,
gender: 'Male',
};
sportsmanObj.myself = sportsmanObj;
const circularFunc = () => {
const sited = new WeakSet();
return (key, value) => {
if (typeof value === 'object' && value !== null) {
if (sited.has(value)) {
return;
}
sited.add(value);
}
return value;
};
};
JSON.stringify(sportsmanObj, circularFunc());
console.log(sportsmanObj);
上記のcircularFunc
でWeakSet
オブジェクトを呼び出しています。これは、弱く保持されたアイテムまたは物事へのポインターを格納するオブジェクトです。
WeakSet
内の各オブジェクトは 1 回しか表示されず、反復または循環データが削除されます。 new
キーワードは、新しいオブジェクトを作成するための演算子です。
return
ステートメントに if
ステートメントをネストしました。 typeof
演算子は、プリミティブ (Undefined
、Null
、Boolean
、Number
、String
、Function
、BigInt
、Symbol
) を返すために、最初の if
ステートメントで使用されます。 ) 評価中です。
値のタイプがオブジェクトと正確に同等であり、そのオブジェクトの重要度が null でない場合、2 番目の if
条件に進み、値が WeakSet()
にあるかどうかを確認します。 JSON.stringify()
に元の循環構造と置換メソッドを送信します。
これにより、コンソールに必要な文字列化された結果が得られます。
{
age: 22,
gender: "Male",
myself: [circular object Object],
name: "Shiv"
}
Shiv is a self-driven and passionate Machine learning Learner who is innovative in application design, development, testing, and deployment and provides program requirements into sustainable advanced technical solutions through JavaScript, Python, and other programs for continuous improvement of AI technologies.
LinkedIn