将字典保存到json文件

时间:2017-08-04 07:55:43

标签: python json dictionary

我尝试通过以下代码片段将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 

3 个答案:

答案 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