json是一种通用的数据格式,可以用于不同的编程语言之间的数据交流。
json相对于xml更小更轻,传输速度更快,xml相对json更安全。
json数据格式的要求:一个json有且只有一个数据;唯一的这个数据必须是json支持的类型的数据。
json转Python
json --> Python
数字 数字
字符串 字符串(双引号变单引号)
布尔 布尔(true ->True、false ->False)
空值 空值(null ->None)
数组 列表
字典 字典
对应的函数:json.loads(json格式的字符串) - 将json格式字符串对应的json数据转换Python数据
json格式字符串指的是内容是json数据的字符串
import json
content = open('data.json', encoding='utf-8').read()
reslut = json.loads(content) # {'name': '小明', 'age': 10, 'gender': '男', 'isMarrade': False}
reslut1 = json.loads('"abc"') # abc
reslut2 = json.loads('[100,"小明",null,true]') # [100, '小明', None, True]
print(reslut, reslut1, reslut2)
Python转json
python --> json
int、float 数字
str 字符串(单引号会变成双引号)
bool True -> true、False -> false
None null
列表、元组 数组
字典 字典
json.dumps(Python数据) - 将指定Python数据转换成对应的json格式字符串
json.dumps(100) # '100'
json.dumps('abc') # '"abc"'
json.dumps(True) # 'true'
案例:从网页接口中解析数据获取所有英雄的名字
# 1.获取json数据(从文件中读出来、直接做网络请求)
import requests
resp = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2766570')
content = resp.text
print(type(content), content)
# 2.json解析(将json数据转换成对应的Python数据)
result = json.loads(content)
for i in result['hero']:
print(i['name'], i['title'])
案例:学生管理系统添加学生
"""
=========添加学生==========
请输入学生姓名:stu1
请输入学生的年龄:19
请输入学生的手机号:110
请输入学生的专业:电子信息
请输入学生的籍贯:重庆
添加成功!
❤️1. 继续
❤️2. 退出
请选择:1
=========添加学生==========
请输入学生姓名:stu2
请输入学生的年龄22
请输入学生的手机号:3332
请输入学生的专业:电子信息
请输入学生的籍贯:重庆
添加成功!
❤️1. 继续
❤️2. 退出
请选择:1
....
=========添加学生==========
请输入学生姓名:stu2
请输入学生的年龄:22
请输入学生的手机号:3332
请输入学生的专业:电子信息
请输入学生的籍贯:重庆
添加成功!
❤️1. 继续
❤️2. 退出
请选择:2
(显示已经添加的所有的学生信息!)
(程序结束)
"""
已经添加过的所有学生需要持久化
文件内容格式:
[
{"name": "小明", "age": 18, "major":"电子信息", "address": "成都"},
...
]
import json
def add_student():
while True:
# 1. 输入学生信息
print('=========添加学生==========')
name = input('请输入学生姓名:')
age = input('请输入学生的年龄:')
tel = input('请输入学生的电话:')
major = input('请输入学生的专业:')
address = input('请输入学生的籍贯:')
# 2. 保存学生信息
content = open('files/students.txt', encoding='utf-8').read() # '[]'
# content = content.read()
all_students = json.loads(content) # type: list
# [{}]
all_students.append({'name': name, 'age': age, 'tel': tel, 'major': major, 'address': address})
open('files/students.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('files/students.txt', encoding='utf-8').read())
count = 0
for x in all_student:
if x['major'] == '电子':
count += 1
print(count)