2016-07-20 25 views
0

入れ子の循環辞書をJSONに変換しようとしています。なぜこれが起こっているPython:Cyclical辞書をJSONに変換する

In [8]: xx = json.dumps(d) 
--------------------------------------------------------------------------- 
OverflowError        Traceback (most recent call last) 
<ipython-input-8-95e57b3e2ca3> in <module>() 
----> 1 xx = json.dumps(d) 

OverflowError: Maximum recursion level reached 

わからないが、私の推測では、それは私の辞書とは何か、そしてそれがどのように構造化されますを持っていることである:私はオーバーフローエラーを取得しています。

+1

*どのように*入れ子式の周期的辞書*を取得しましたか? –

+0

ええと、周期的な辞書で 'ValueError'を取得しました。 – Alex

答えて

0

Pythonのjsonデコーダには、循環オブジェクト(check_circular)があるかどうかをチェックする機能があります。デフォルトはTrueです。その行動はあなたが見ているオーバーフラワーを上げることです。

(Pythonの3.5では、私が有効になってcheck_circularValueErrorを取得し、それにRecursionError無効)今

、周期的なデータ構造のJSON表現がまだ出来確かに、物事を解決しませんFalseに設定無限になる。

唯一の方法は、カスタムJSONエンコーダとDECODERを作成し、独自のデコーダ用のスキーマを作成して循環参照を復元できるようにすることです。

0
循環的な辞書を作成する方法

、最短たとえば私が考えることができます:だから質問はあなたの質問が何であるかである

>>> foo = { 'bar': None } 
>>> foo['bar'] = foo 
>>> foo 
{'bar': {...}} 
>>> foo['bar'] 
{'bar': {...}} 
>>> foo['bar']['bar'] 
{'bar': {...}} 

。 Python(少なくとも2.7、とにかく)が循環参照を許可するという事実にもかかわらず、あなたはそれで何をしたいですか? JSONデータがサイクルをサポートできるようにしたいのですか?独自のエンコーダとデコーダを作成することは実用的ではないようです。JSONではなく、一般的にJSONとして他の人に渡すことができるデータではなく、標準に書き込まれたデコーダは正しくデコードできません。

辞書を実際に自己参照することなく、サイクルを見つけたり、何らかの形で自己参照したり、おそらく辞書のアイテムを見つけることのできる参照クラスを作成するのは、はるかに意味があるようですオブジェクトを直接参照するのではなく、リストのためのキーとインデックスのリストを使用したいのですか?

そして、それを標準のエンコーダで実行します。

関連する問題