コードでこの問題に数回遭遇し、小さなケースでは再現できませんでしたが、誰かが私を正しい方向に向けてくれることを願っています. 保存オブジェクトを作成するときに発生します(基本的に、プログラムのさまざまな部分を一連のネストされたdictとしてパッケージ化し、それらをピクルしてテキストファイルに書き込みます)。コードの関連部分は次のとおりです。
so = {}
for l in self.components.items():
so[l[0]] = l[1].createSaveObject()
temp = so
print "Component SO:",temp
print "Component Pickled:",jsonpickle.encode(temp)
return jsonpickle.encode(temp)
したがって、関数はコンポーネントをループし、それぞれの辞書項目を作成してから、ピクルされた結果を返します。問題は、次の出力を提供する 2 つの print ステートメントに示されています (問題なくピクルされている動作中のコンポーネントを無視するために切り捨てられています)。
Component SO: {..., 'points': {201: [(43, 614.6), (268, 614.6), (268, 254.6), (43, 254.6)], 2041: [(79.5, 607.15999999999997), (304.5, 607.15999999999997), (304.5, 247.16), (79.5, 247.16)]},...}
Component Pickled: {..., "points": {"201": [{"py/tuple": [43, 614.6]}, {"py/tuple": [268, 614.6]}, {"py/tuple": [268, 254.6]}, {"py/tuple": [43, 254.6]}], "2041": [{"py/tuple": [null, null]}, {"py/tuple": [null, null]}, {"py/tuple": [null, null]}, {"py/tuple": [null, null]}]},...}
ご覧のとおり、高精度の数値 (および同じセクション内の通常の値に切り捨てられた他の要素) を含む辞書エントリは、null としてエンコードされます。Python シェルからこれを再現できませんでした。プログラムの実行中にのみ発生します。ただし、2 つの出力の唯一の違いは jsonpickle.encode 呼び出しであるため、ソースを見つける方法がわかりません。
ありがとう!