3

MEAN スタックで Contentful を使用しています。Contentful API にクエリを実行し、json オブジェクトを取得します。

contentClient.entries(query, function(err, entries){
  if (err) throw err;
  console.log(entries);
});

次のエラーが表示されます。

[TypeError: Converting circular structure to JSON]

オブジェクトは巨大です (コンソールからドキュメントにエクスポートすると 3000 行を超えます)。ここに投稿することはできませんが、循環構造の問題がオブジェクト内のどこにあり、これをどのように修正するかを見つける方法があるかどうか疑問に思っています。

4

3 に答える 3

5

私は Contentful の開発者です。あなたの質問の 2 番目の部分についてお手伝いできると思います。

最初の部分に関しては、グルーゼの答えは、ノードランドにいる場合に理想的なことです。代替手段 (ブラウザーでも役立つ可能性があります) は、https://www.npmjs.com/package/safe-json-stringifyを使用しています。

2 番目の部分に関しては、contentful.js ライブラリが行うことは、他のエントリへのリンクを解決することです。生の JSON には、リンクのメタデータを含むオブジェクトのみが含まれますが、リンクされたエントリは添付の includes プロパティに含まれます。その後、ライブラリがそれらを解決して解決するので、自分で行う必要はありません。

ただし、エントリを相互にリンクするときに循環リンクを作成することはできます (エントリをそれ自体にリンクすることもできます)。私が提案する素晴らしい機能のアイデア)。

したがって、その循環参照が見つかったら、それが根本的な問題になるはずです。

于 2015-05-14T15:48:50.897 に答える
1

ノード 0.10 および 0.12 では、次のことができます。

var obj = {"child": {}};
obj.obj = obj;
util.inspect(obj, {depth: null})

次のようなものが得られます。

'{ child: {}, obj: [Circular] }'

Depth は、オブジェクトのフォーマット中に再帰する回数を示し (デフォルトでは 2 回)、null は無期限であることを示します。

循環参照の場所を見つけるには、結果の文字列で "[Circular]" を探すのが非常に簡単です。

于 2015-05-14T13:24:54.407 に答える