<p>另一个安全函数是使用JSON。这里我使用<code>json.dump()</code>和<code>json.load()</code>函数。唯一的障碍是json load将字符串作为unicode字符串返回,因此我使用自己的jsondeconder类,该类调用super,然后遍历结果对字符串进行编码:</p>
<pre><code>import json
from types import *
# your own decoder class to convert unicode to string type
class MyJSONDecoder(json.JSONDecoder):
# decode using our recursive function
def decode(self,json_string):
return self._decode_obj(super(MyJSONDecoder,self).decode(json_string))
# recursive function to traverse lists
def _decode_list(self,data):
decoded = []
for item in data:
if type(item) is UnicodeType: item = item.encode('utf-8')
elif type(item) is ListType: item = self._decode_list(item)
elif type(item) is DictType: item = self._decode_obj(item)
decoded.append(item)
return decoded
# recursive function to traverse objects
def _decode_obj(self,data):
decoded = {}
for key, value in data.iteritems():
if type(key) is UnicodeType: key = key.encode('utf-8')
if type(value) is UnicodeType: value = value.encode('utf-8')
elif type(value) is ListType: value = self._decode_list(value)
elif type(value) is DictType: value = self._decode_obj(value)
decoded[key] = value
return decoded
# the dictionary to save
dict = {
"123": 2,
"125": 4,
"126": 5,
"128": 6
}
# decoder instance
my_decoder = MyJSONDecoder()
# write object to file
with open('serialized.txt', 'w') as new_file:
json.dump(dict, new_file)
new_file.close()
print "Original", dict
# read object from file
with open ("serialized.txt", "r") as old_file:
dictcopy = my_decoder.decode(old_file.read())
old_file.close()
print "**Copy**", dictcopy
</code></pre>