编写了以下两个函数,用于存储和检索任何具有json和jsonpickle组合的Python (内置或用户定义的)对象(在2.7中)
def save(kind, obj):
pickled = jsonpickle.encode(obj)
filename = DATA_DESTINATION[kind] \\returns file destination to store json
if os.path.isfile(filename):
open(filename, 'w').close()
with open(filename, 'w') as f:
json.dump(pickled, f)
def retrieve(kind):
filename = DATA_DESTINATION[kind] \\returns file destination to store json
if os.path.isfile(filename):
with open(filename, 'r') as f:
pickled = json.load(f)
unpickled = jsonpickle.decode(pickled)
print unpickled我还没有用用户定义的对象测试这两个函数,但是当我尝试save()一个内置的字符串字典时,(即.{'Adam':'Age 19','Bill','Age 32'}),当我检索相同的文件时,我得到了同样的unicode字典,{u'Adam':u'Age 19',u'Bill',u'Age 32'}。我认为json/jsonpickle默认编码为utf-8,这是怎么回事?
更新:删除所有jsonpickle编码/解码不会影响输出,仍然是unicode,这似乎是json的问题?也许我做错了什么。
发布于 2012-08-13 06:01:32
您可以在调用loads()之后对unicode字符串进行编码。
json.loads('"\\u79c1"').encode('utf-8')现在你又有了一个普通的字符串。
发布于 2017-07-21 18:41:42
import jsonpickle
import json
jsonpickle.set_preferred_backend('json')
jsonpickle.set_encoder_options('json', ensure_ascii=False)
print( jsonpickle.encode( { "value" : "значение"}) ){"value":"значение"}
发布于 2012-08-13 05:18:43
我还以为
..。默认编码为utf-8,这是怎么回事?
不,它会编码成ASCII码。然后解码成unicode。
>>> json.dumps(u'私')
'"\\u79c1"'
>>> json.loads('"\\u79c1"')
u'\u79c1'https://stackoverflow.com/questions/11925919
复制相似问题