Python基础(二):
本章列举出json格式在python中的常用方法
1、什么是JSON
*JSON(JavaScript Object Notation)*是一种轻量级的数据交换格式,广泛应用于AJAX中web服务器和客户端的通讯的数据格式,现在也常用于HTTP请求中。其数据支持对象、数组、字符串、数字、true/false和null。
Python数据类型与json数据类型的映射关系如下:
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
JSON拥有严格的格式,主要格式如下:
1、只能用双引号,不能用单引号
2、元素之间用逗号隔开,最后一个元素不能有逗号
3、不支持注释
4、中文等特殊字符传输时应确保转为ASCII码(\uXXX格式)
5、支持多层嵌套Object或Array
JSON的语法如下:
数组(Array)用方括号(“[]”)表示。
对象(0bject)用大括号(“{}”)表示。
名称/值对(name/value)组合成数组和对象。
名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
并列的数据之间用逗号(“,”)分隔
举个栗子:
{
"name": "Sharon",
"sex": "Male",
"age": 27,
"vip": true,
"favor": {
"水果": "西瓜",
"运动": "跑步"
},
"family_member": [
"Father",
"Mother",
"Brother"
]
}
2、JSON常用方法
常用方法有4个:load、dump、loads、dumps
1、json.load():从文件中读取json格式数据,并返回对应的python数据类型
test.txt存放上面例子中的json数据
import json
with open("test.txt", "r+", encoding="utf-8") as fr:
res = json.load(fr)
print(res)
print(type(res))
输出如下:
{'name': 'Sharon', 'sex': 'Male', 'age': 27, 'vip': True, 'favor': {'水果': '西瓜', '运动': '跑步'}, 'family_member': ['Father', 'Mother', 'Brother']}
<class 'dict'>
注意:如果json中包含中文数据,文件需要编码成utf-8
2、json.dump():将python格式数据转换为json格式并写入文件
with open("test.txt", "w+", encoding="utf-8") as fw:
json.dump(dict1, fw, ensure_ascii=False)
注意:如果要写入中文数据,文件需要编码成utf-8,且
ensure_ascii参数要设置为False:表示不使用ASCII编码。因为json序列化时默认使用ascii编码,输出到文件中就会是"\u6c34\u679c"
3、json.loads():将json对象转换成python对象
4、json.dumps():将python对象转换成json对象
res1 = json.dumps(dict1, indent=4, ensure_ascii=False)
print(res1)
print("dumps后的数据类型为:")
print(type(res1))
res2 = json.loads(res1)
print(res2)
print("loads后的数据类型为:")
print(type(res2))
输出如下:
{
"name": "Sharon",
"sex": "Female",
"age": 27,
"vip": true,
"favor": {
"水果": "西瓜",
"运动": "跑步"
},
"family_member": [
"Father",
"Mother",
"Brother"
]
}
dumps后的数据类型为:
<class 'str'>
{'name': 'Sharon', 'sex': 'Female', 'age': 27, 'vip': True, 'favor': {'水果': '西瓜', '运动': '跑步'}, 'family_member': ['Father', 'Mother', 'Brother']}
loads后的数据类型为:
<class 'dict'>
注意:indent参数表示缩进