一、 概述
json原本为javascript的标准数据类型,javascript object notation,这个数据格式广泛应用各类管理软件(java,php,c#)、大数据、人工智能中。
本文简要描述json用到的utf-8/unicode字符集,及python处理json相关技术
1、 python词典到json字符串,内存变量
2、 python词典到json字符串,写入文本文件
3、 json字符串到python词典,内存变量
4、 json文本文件到python词典,读取文本文件
5、 pytyon普通类属性到json转换,内存变量
二、 utf-8与unicode
1、 utf-8
是一种统一字符集,可以表示全球任何一个国家的语言
即同一个文件中,可以同时有多国语言文字
是可视化方式显示各国文字
一个utf-8的字符可以是1—4个字节,在java语言中,一个utf-8的char可能是1—4字节,不是固定的2个字节。
2、 unicode
是文本方式表示统一字符编码,如果是ascii则直接显示,如果是汉字则用2个十六进制字节表示\u8dea等
不能可视化方式显示汉字
3、 utf-8与unicode的关系
utf-8是unicode的一种实现方式之一
unicode是文本表示字符编码,不能直接显示汉字,全文只能显示ascii字符
utf-8是可显示的字符内容
unicode的字节与utf-8的字节不相同
三、 python3的json字符串变量的字符集
1、 方式1,utf-8可视化方式
json字符串可以是utf-8,即可视化方式显示的字符变量,也可以可视化方式存在于文件中
python3编程环境默为为utf-8,所有汉字
jsonString={可以直接用utf-8字符集表示}
2、 方式2,unicode非可视化方式
json字符串也可以是unicode字符代码
jsonString={unicode字符代码方式表示}
四、 python处理json对象的特点
1、 json变量数据类型
1) 数值
包括整数,浮点数
2) 字符串
必须用双引号引起来,不可以单引号
3) 数组
这个数组是javascript的数组,在python中是dict,词典
不允许json变量再有其他数据类型,例如不允许pytyon的datetime等类型
4) json变量可以嵌套
即一个键名称的值可能是另一个json变量,或数组
2、 json的键名称必须双引号
不同于javascript中,键名称可以是双引号,单引号
3、 pytyon不直接处理json对象,而是用dict词典处理json变量
python不同于java处理json,有JSONObject,JSONArray
python是将json字符串转换为词典dict,用dict处理json原始变量中的内容读写
五、 python处理json示例
1、 基本语法
import json
dict-->json字符串
json.dumps(dict,indent=xxx,ensure_ascii=True/False,sort_keys=False/True,separators=’,’,’:’
endcoding=xxx)
上述语法中:
sort_keys不需要,对生成json字符串由键名称排序
separators不需要,除非改变json语法
encoding不需要,python3环境,默认为utf-8
indent:用于生成回行,每个回行有几个空格,一般不需要
ensure_ascii:默认为True,即生成unicode码,为False时,生成utf-8可显示字符串
dict-->硬盘文件
f=open(‘json文件名称.json’,’w’)
json.dump(dict,f, ndent=xxx,ensure_ascii=True/False,sort_keys=False/True,separators=’,’,’:’
endcoding=xxx)
f.close()
json.dumps(...)语法也可以是下面方式实现,复杂些
json.JSONEncoder(indent=xxx,ensure_ascii=True/False,sort_keys=False/True,separators=’,’,’:’
endcoding=xxx).encode(dict)
json字符串-->dict
dict=json.loads(jsonString)
json文件-->dict
f=open(‘json文件’,’r’)
dict=json.load(f)