\

Pythonでは、辞書に循環参照があるときにJSON文字列に変換しようとすると、”ValueError: Circular reference detected”というエラーが発生します。このエラーを解決するためには、循環参照を追加するときに辞書の深いコピーを作成するか、json.dumps()を呼び出す前に循環参照を削除します。

import json

a_dict = {}
a_dict['site'] = 'bobbyhadz.com'
a_dict['nested'] = a_dict.copy()

json_string = json.dumps(a_dict)
print(json_string)

上記のコードでは、辞書の浅いコピーを作成して循環参照を追加しています。これにより、辞書はメモリ内の同じ場所に格納されなくなり、循環参照がなくなります。

深いコピーを作成したい場合は、copy.deepcopyメソッドを使用します。

import json
import copy

a_dict = {}
a_dict['site'] = 'bobbyhadz.com'
a_dict['nested'] = copy.deepcopy(a_dict)

json_string = json.dumps(a_dict)
print(json_string)

このメソッドは辞書の深いコピーを作成するため、ネストされた参照が元の辞書のキーを指すことはありません。

また、json.dumps()メソッドを呼び出す前に循環参照を削除することも可能です。

import json

a_dict = {}
a_dict['site'] = 'bobbyhadz.com'
a_dict['nested'] = a_dict
del a_dict['nested']

json_string = json.dumps(a_dict)
print(json_string)

以上の方法で、Pythonの”ValueError: Circular reference detected”エラーを解決することができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です