python的字典和json转的互转

res = ''' {"key1":"123","key2":"abc"} '''  #定义json格式的字符串,json的格式必须是"" 双引号,这点和python不同,不能用单引号或者三引号进行标注字符串的格式。
print(type(res))
>>> <class 'str'>


res2 = {"key1":"123","key2":"abc"}
print(type(res2))
>>> <class 'dict'>

区别:在python中遇到{}格式的,默认当做了dict处理,要想{}表达为json格式的,在定义的时候,需要添加''' ''' 三引号,告诉python解释器三引号里面的内容为json格式的字符串,而非字典。

当然,在python中也会对dict和json串之间经常会进行转换方便使用。json串是适用于任何语言的文件传输格式,所以,在Python中,我们可以借用json的标准库进行转换。

json 转换成 dict

import json  #导入标准库json
res = ''' {"key1":"123","key2":"abc"} ''' res_dict = json.loads(res) #使用loads()将json字符串的res转换成方便python处理的dict res_dict print(type(res_dict))

>>> <class 'dict'>

dict 转换成 json

res2 = {"关键字一号":"123","key2":"abc"}
res2_json = json.dumps(res2,indent=4)
print(res2_json)
print(type(res2_json)) #<class 'str'>

>>>{"\u5173\u952e\u5b57\u4e00\u53f7": "123","key2": "abc"}


从上面的结果可以看出,当key值是中文的时候,打印出来的内容时中文的unicode字符编码,那么如何让中文展示成我们希望看到的中文呢? 只需要在dumps(ensure_ascii=False),将中文正常展示
将如上代码修改为
res2 = {"关键字一号":"123","key2":"abc"}
res2_json = json.dumps(res2,indent=4,ensure_ascii=False) #indent 左边空格4个字符,格式化json内容
print(res2_json)
print(type(res2_json)) #<class 'str'>


>>>{"关键字一号": "123","key2": "abc"} 

  如上我们看到,当将字典转换成json的格式转换的时候,可以直接用json.dumps()方法;当将字json转换成字典的格式的时候,直接json.loads()

如果字符串内容很大,大到1T的时候,如果还用上面的方法,难免性能不加。在json库里面,对文件的转换也提供了方法:

将文件内容转换成dict 

import json
f =open('testmiya.txt',encoding='utf-8')
res_dict = json.load(f)
print(res_dict)

>>>{'海龙': '111', 'xiaojun': '123456', 'tanailing': '11111', 'xiaohei': '7891'}


不需要讲文件的内容读取出来,直接将打开的文件对象f进行转换就可以。

  

将字典内容直接写入文件。

import json
res2 = {"关键字一号":"123","key2":"abc"}
f=open('testjson.txt',mode='w',encoding='utf-8') #只写模式打开文件
json.dump(res2,f,indent=4,ensure_ascii=False)#将字典直接通过dump转换成字典后写入文件对象f,不需要转换成字典赋值给对象,然后再调用f.write()写入文件。从而更加高效的实现了文件的写入
f.close()

>>>{"关键字一号": "123","key2": "abc"}

  

 

posted @ 2018-09-07 12:39  花er壹樣的女人  阅读(12964)  评论(0编辑  收藏  举报