Python第十四章 Json操作
第十四章 Json操作
14.1 JSON概述
什么是JSON
- JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据
- JSON本质上是一个带有特定格式的字符串
主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。
各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型, 而其它语言可能没有对应的字典。
为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。如下图,以Python和C语言互传数据为例:
json格式的语法要求有两类
{"name":"admin","age":18}
# 或者
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]
【说明】Python中使用JSON是有优势的,JSON相当于Python中的字典或者Python中的字典列表
下面要学习的就是如何转换Python和JSON
14.2 JSON转换
Python数据和Json数据的相互转化
- Python→JSON:json.dumps(py_data)
- JSON→Python:json.loads(json_str)
JSON对应的Python有两种类型:字典、字典列表,因此分开展示
【说明】JSON转换成字典后,key和value都是字符串,如果有需要要进行类型转换
1、Python字典 & JSON
import json
# 类型转换
py_dict = {"name": "mary", "age": 18}
json_data = json.dumps(py_dict)
print(json_data) # {"name": "mary", "age": 18}
print(type(json_data)) # <class 'str'>
py_data = json.loads(json_data)
print(py_data) # {'name': 'mary', 'age': 18}
print(type(py_data)) # <class 'dict'>
# json转换为py对象之后的操作
print(py_data["name"]) # mary
print(py_data["age"]) # 18
2、Python字典列表 & JSON
# 导入JSON模块
import json
# 类型转换
py_list = [{"name": "mary", "age": 16}, {"name": "lucy", "age": 18}]
json_data = json.dumps(py_list)
print(json_data) # [{"name": "mary", "age": 16}, {"name": "lucy", "age": 18}]
print(type(json_data)) # <class 'str'>
py_data = json.loads(json_data)
print(py_data) # [{'name': 'mary', 'age': 16}, {'name': 'lucy', 'age': 18}]
print(type(py_data)) # <class 'list'>
# JSON转换成py对象之后的操作
print(py_data[0]) # {'name': 'mary', 'age': 16}
print(type(py_data[0])) # <class 'dict'>
print(py_data[0]["name"]) # mary
print(py_data[0]["age"]) # 16
【说明】转换成list[dict]之后,要先用索引将字典取出来,比如list[0],然后就按照字典操作即可
3、中文问题
import json
py_list = [{"name": "张三", "age": 16}, {"name": "李四", "age": 18}]
json_data = json.dumps(py_list)
print(json_data) # [{"name": "\u5f20\u4e09", "age": 16}, {"name": "\u674e\u56db", "age": 18}]
print(type(json_data)) # <class 'str'>
如图,Python对象中有中文的话,转换成JSON字符串会按照ASCII编码,如果有中文可以带上参数ensure_ascii=False
import json
py_list = [{"name": "张三", "age": 16}, {"name": "李四", "age": 18}]
json_data = json.dumps(py_list, ensure_ascii=False)
print(json_data) # [{"name": "张三", "age": 16}, {"name": "李四", "age": 18}]
print(type(json_data)) # <class 'str'>
14.3 JSON相关网址
在普通的文本文件中,JSON是没有格式化的,因此可以使用在线工具进行格式化
- 懒人在线工具http://www.kuquidc.com/
可以以树的形式展开