我尝试通过以下代码片段将dictinary保存到json文件。 我找不到这个网站的答案来解决这个问题。
怎么了?
dic = { b'pejorative': 0, b'greek': 1, b'from': 2, b'english': 3, b'and': 4 ... }
json.dump(dic,
open(os.path.join(path, 'model_dict.json'), 'wb'),
ensure_ascii=False))
或
json.dump(dic, open(os.path.join(path, 'model_dict.json'), 'wb'),
error :
* TypeError: key b'pejorative' is not a string*
* TypeError: key b'as' is not a string
答案 0 :(得分:1)
出了什么问题?好吧,它用错误信息中的所有字母写成:
TypeError:key b' pejorative'不是字符串
你的dict键是字节串(参见前面的b''
),json.dump()
希望它们是(unicode)字符串。
解决方法是使用从字节串解码的unicode字符串重建dict,即:
dic = {key.decode():value for key, value in dic.items()}
但如果您的任何密钥包含除utf-8之外的任何内容(这是bytes.decode()
的默认编码),则可能会增加。
真正的解决方案当然是修复你最初填充你的方式 dict所以你从一开始就使用unicode字符串。
答案 1 :(得分:1)
官方文件明确声称
json模块总是生成str对象,而不是字节对象。因此,fp.write()必须支持str imput
实际上,在python中,字符串作为str
编码序列的Unicode
对象存储在内存中,如果需要,可以使用.decode()
答案 2 :(得分:0)
我遇到了同样的问题。如果您需要将“multidimensional”dict转换为UTF:
def convert2utf( data):
converted_object={}
for key, value in data.items():
if (not isinstance(value, dict)) and (not isinstance(value, list)):
converted_object[key.decode()]=value.decode()
elif isinstance(value, dict):
converted_object[key.decode()]=convert2utf(value)
else:
sub_list=[]
for next_item in value:
sub_list.append(convert2utf(next_item))
converted_object[key.decode()]=sub_list
return converted_object