2

JSONを使用して、辞書を別のpythonプログラムに転送したいと思います。その前に、ロード/ダンプ プロセス後にデータがまったく同じであることを確認したいと思います。したがって、テストするプログラムを開始しました。

>>> import json
>>> original_dict = {0: {1: 2}}
>>> original_dict == json.loads((json.dumps(original_dict)))
False

機能させるためにいくつかのロード/ダンプパラメーターを見逃していたと思います。ご意見をお聞かせください。

前もって感謝します

4

4 に答える 4

3

RFC4627によると:

An object structure is represented as a pair of curly brackets
surrounding zero or more name/value pairs (or members).  A name is a
string.  A single colon comes after each name, separating the name
from the value.  A single comma separates a value from a following
name.  The names within an object SHOULD be unique.

   object = begin-object [ member *( value-separator member ) ]
   end-object

   member = string name-separator value

つまり、オブジェクトのキーは文字列でなければなりません。あなたの場合、代わりに pickle を使用することをお勧めします。

>>> import pickle
>>> original_dict = {0: {1: 2}}
>>> original_dict == pickle.loads((pickle.dumps(original_dict)))
True
于 2013-09-03T02:30:21.597 に答える
1

JSON 自体の微妙な点が欠けています。オブジェクトのすべてのキーは文字列です。したがって、オリジナルdictを json に変換すると、次のようになります。

>>> json.dumps(original_dict)
'{"0": {"1": 2}}'

そして、それをロードし直すと、

>>> json.loads(json.dumps(original_dict))
{u'0': {u'1': 2}}

キーが文字列 (より正確には ) のままであることがわかりますunicode。もともと使っていた場合

>>> original_dict = {'0': {'1': 2}}
>>> json.loads(json.dumps(original_dict)) == original_dict
True

あなたはあなたが期待したものを見るでしょう。

とはいえ、任意のデータを正確に保存する必要がある場合、json は適していない可能性があります。おそらく、他の回答の提案の1つを使用したほうがよいでしょう。

于 2013-09-03T02:28:52.940 に答える
0

pickle lib を使用してオブジェクトをシリアル化し、結果文字列 MD5 ハッシュを計算するのはどうですか?

于 2013-09-03T02:21:17.747 に答える