什么是json
json和xml都是通用的数据格式,可以用于不同编程语言之间的数据交流。
json相对于xml更小更轻、传输速度更快;xml相对json更安全。
json数据
json数据格式的要求:一个json有且只有一个数据;唯一的这个数据必须是json支持的类型的数据。
json支持数据:
1)数字:包括整数和小数,表示的时候直接写:100、23.5、-3.14、3e4
2)字符串:用双引号引起来的数据:“abc”、“小明”、“abc\n123\u4e00”
3)布尔:只有true和false两个值
4)空值:null
5)数组:相当于Python的列表:[数据1,数据2,…]
6)字典:相当于Python的字典,但是键只能是字符串:{键1:值1,键2:值2,…}
python数据和json数据之间相互转换
python中提供了json模块专门用来处理python中的json数据。
import json
1)json转Python
json | python |
---|---|
数字 | 数字 |
字符串 | 字符串(双引号变单引号) |
布尔 | 布尔(true -》True、false -》False) |
空值 | 空值(null -》None) |
数组 | 列表 |
字典 | 字典 |
对应的函数🍇:
json.loads(json格式字符串) 将json格式字符串对应的json数据转换Python数据
注意:json格式字符串指的是内容是json数据的字符串。
content=open('data.json',encoding='utf-8').read()
result=json.loads(content)
print(result)
result=json.loads("abc") #报错,字符串内容是abc不是一个合法的json数据
result=json.loads('"abc"') #"abc"->'abc'
result = json.loads('100') # 100 -> 100
print(result, type(result))
result = json.loads('true') # true -> True
print(result, type(result))
result = json.loads('[100, "小明", null, true, false]')
print(result, type(result))
2)python转json
python | json |
---|---|
int、float | 数字 |
str | 字符串(单引号变双引号) |
布尔 | 布尔(True -》true、False -》false) |
None | null |
列表、元组 | 数组 |
字典 | 字典 |
对应的函数🍇:
json.dumps(Python数据) 将指定Python数据转换成对应的json格式字符串
json.dumps(100) # '100'
json.dumps('abc') # '"abc"'
json.dumps(True) # 'true'
result = json.dumps({'a': 10, 20: 30, 'name': 'xiaoming', 'isMarred': True})
print(result, type(result)) # '{"a": 10, "20": 30, "name": "xiaoming", "isMarred": true}'
🍖学生管理系统添加学生。
import json
def add_student():
while True:
# 1. 输入学生信息
print('=========添加学生==========')
name = input('请输入学生姓名:')
age = input('请输入学生的年龄:')
tel = input('请输入学生的电话:')
major = input('请输入学生的专业:')
address = input('请输入学生的籍贯:')
# 2. 保存学生信息
content = open('student.txt', encoding='utf-8').read() # '[]'
all_students = json.loads(content) # type: list
# [{}]
all_students.append({'name': name, 'age': age, 'tel': tel, 'major': major, 'address': address})
open('student.txt', 'w', encoding='utf-8').write(json.dumps(all_students))
print('添加成功!')
# 3. 提示继续或者退出
print('❤️1. 继续')
print('❤️2. 退出')
value = input('请选择:')
if value == '1':
pass
else:
# 打印已经添加过的所有的学生信息
print(all_students)
break
if __name__ == '__main__':
# add_student()
# 统计电子专业学生的人数:
all_student = json.loads(open('student.txt', encoding='utf-8').read())
count = 0
for x in all_student:
if x['major'] == '电子':
count += 1
print(count)