1、什么是JSON
JSON和XML都是一种通用的数据格式,可以用于不同编程语言之间的数据交流
JSON格式相对于xml数据更简单轻小,传输速度更快,xml相当于JSON更安全
2、JSON数据
json数据格式的要求:一个JSON只有一个数据,唯一的这个数据必须是JSON支持的类型的数据
JSON支持的类型:
- 数字:包括整数和小数,表示的时候直接写:100、0.31、-21、3e4
- 字符串:由双引号引起来的数据 “sadsa”、“小明”
- 布尔:只有true 和false两个值
- 数组:相当于python的列表 [数据1,数据2,…]
- 空值:null
- 字典:相当于python的字典,但是JSON中的键只能是字符串
3、python数据与JSON 数据之间的相互转换
3.1、json---->python
json.load(json格式字符串) 将 json格式字符串 对应的JSON数据转换成python数据
注意:json格式字符串 指的是json数据的字符串
json | python |
---|---|
数字 | 数字 |
字符串 | 字符串(双引号变单引号) |
布尔 | 布尔(true false->True False) |
空值 | 空值(null->None) |
数组 | 列表 |
字典 | 字典 |
content=open('data.json',encoding='utf-8').read()
result=json.loads(content)
print(content)
print(result)
# result=json.loads("abc") # 报错,字符串内容是abc,不是一个合法的JSON数据
result=json.loads('"abc"')
print(result) # abc
result=json.loads('true')
print(result) # true
result=json.loads('100')
print(result) # 100
result=json.loads('[100,"小明",null,true,false]')
print(result)
示例
# 示例 从网页接口中解析数据获取所有英雄的名字
# 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
# 2 json 解析
result=json.loads(content)
for i in result['hero']:
print(i['name'],i['title'])
3.2、python---->json
json.dumps(Python数据) 将指定python数据转成对应的json格式字符串
python | json |
---|---|
int、float | 数字 |
str | 字符串(单引号转成双引号) |
bool | True False->true false |
None | null |
列表元组 | 数组 |
字典 | 字典 |
print(json.dumps(100)) # 100
print(json.dumps('abc')) # "abc"
print(json.dumps(True)) # true
result=json.dumps({'a':10,20:30,'name':'丽丽','ismarried':True})
print(result) # {"a": 10, "20": 30, "name": "\u4e3d\u4e3d", "ismarried": true}
4、JSON的实际应用
# 示例 学生管理系统添加学生
import json
'''
========添加学生========
姓名:
年龄:
手机号:
专业:
籍贯:
添加成功!
1.继续
2.退出
请选择
'''
'''
数据存储思路
1、数据持久化
2、数据存储的格式
'''
def add_stu():
while True:
# 输入学生信息
print(' ========添加学生======')
name = input('请输入学生姓名: ')
age = input('请输入学生的年龄: ')
tel = input('请输入学生的电话: ')
major = input('请输入学生的专业: ')
address = input('请输入学生的籍贯: ')
# 2.保存学生信息
content=open('file/student.txt', 'r', encoding='utf-8').read()
all_stu=json.loads(content) # type:list
all_stu.append({'name':name,'age':age,'tel':tel,'major':major,'address':address})
open('file/student.txt','w',encoding='utf-8').write(json.dumps(all_stu))
print('添加成功')
# 3.提示继续或者退出
print('1.继续')
print('2.退出')
value=input('请选择:')
if value=='1':
pass
else:
print(all_stu)
break
if __name__ == '__main__':
add_stu()