Json编码复杂的字典

时间:2014-12-18 19:03:16

标签: python python-2.x

我将如何编码以下dict:

data = {
    'name': 'david',
    'avatar': open('file.jpg').read()
}

当我尝试json.dumps(data)时,我得到UnicodeDecodeError

2 个答案:

答案 0 :(得分:2)

您必须使用Python 2.x.由于字符串中包含Unicode数据,因此需要将其设为Unicode string literal

>>> import json
>>> data = {
...     'name': 'david',
...     'avatar': u'\xed\xb3\x1cW\x7f\x87\x1c\xb9*Pw\x9a#W\x05\xeaNs\xe4\xaa@\xddi\x8e\\\x15\xa8;\xcd\x91\xab\x02u\xa79rU\xa0\xee4\xf7K\xb9\x05{t\x02\xc6I\xb6\xaa\xbf\x00\x00\x00\x00IEND\xaeB`\x82...'
... }
>>> json.dumps(data)
'{"name": "david", "avatar": "\\u00ed\\u00b3\\u001cW\\u007f\\u0087\\u001c\\u00b9*Pw\\u009a#W\\u0005\\u00eaNs\\u00e4\\u00aa@\\u00ddi\\u008e\\\\\\u0015\\u00a8;\\u00cd\\u0091\\u00ab\\u0002u\\u00a79rU\\u00a0\\u00ee4\\u00f7K\\u00b9\\u0005{t\\u0002\\u00c6I\\u00b6\\u00aa\\u00bf\\u0000\\u0000\\u0000\\u0000IEND\\u00aeB`\\u0082..."}'
>>>

u放在字符串文字之前,告诉Python将字符串视为Unicode。

请注意,自all strings are now Unicode by default以来,Python 3.x中不需要这样做。

答案 1 :(得分:2)

所以你试着用json编码一张图片。如果要在网页上显示,请考虑使用data-url-encoding:

image = "data:image/jpg;base64,%s" % ''.join(open('file.jpg').read().encode('base64').split())
data = {
    'name': 'david',
    'avatar': image,
}
json_data = json.dumps(data)

或者如果您只需要二进制数据,只需使用:

image = open('file.jpg').read().encode('base64')
data = {
    'name': 'david',
    'avatar': image,
}
json_data = json.dumps(data)

#decode
data = json.loads(json_data)
image = data['avatar'].decode('base64')