作者:Peter
来源:Python编程时光
在实际工作中,尤其是web数据的传输,我们经常会遇到json数据。它不像常见的文本数据、数值数据那样友好,而且它和Python中的字典类型数据又很相像,给很多人造成了困扰。
本文结合具体案例详细介绍了如何利用Python和pandas(Python的第三方库)来处理json数据,主要内容包含:
-
json数据简介
-
常用json数据转化网站
-
json数据和Python数据的转化
-
pandas处理json数据
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:721195303
1. JSON 简单介绍
1.1 什么是json数据
首先,我们看一段来自维基百科对json的解释:
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。
JSON 数据格式与语言无关。即便它源自JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。文件扩展名是
.json
。
通过上面的官方介绍,我们总结3点:
-
JSON是一种文本(资料)语言,超轻量级的数据交换格式
-
JSON数据容易阅读,易读性强
-
源自JavaScript,其他语言可解析JSON数据
1.2 json数据类型
JSON实际上是JavaScript的一个子集,JSON语言中仅有的6种数据类型或者它们之间的任意组合:
-
number:和JavaScript中的number一致
-
boolean:JavaScript中的true或者false
-
string:JavaScript中的string
-
null:JavaScript中的null
-
array:JavaScript的表示方式:[]
-
object:JavaScript的
{…}
表示方式
1.3 两点规定
1、JSON语言中规定了字符集必须是UTF-8
2、为了统一解析,JSON的字符串规定必须是双引号""
2. 常用json数据转化网站
1、json.cn:https://www.json.cn/
2、json菜鸟工具:https://c.runoob.com/front-end/53
3、sojson:https://www.sojson.com/,非常全的json处理网站
4、kjson:https://www.kjson.com/
5、编程狮-json检验工具:https://www.w3cschool.cn/tools/index?name=jsoncheck
6、JSONViewer:http://jsonviewer.stack.hu/,用于检测Json格式是否正确的一个在线应用工具
3. JSON 和 Dict 类型转化
本小节主要讲解的json类型数据和Python类型的转化。
json
对象和Python
字典的转化主要使用的是内置json
包,下面详细介绍该包的使用。详细的学习资料见官网:https://docs.python.org/3/library/json.html
首先使用的时候直接导入该包:
import json
json
包中存在4中方法用来进行和Python内置数据类型的转化:
方法 | 作用 |
---|---|
json.dumps() | 将python对象编码成Json字符串:字典到json |
json.loads() | 将Json字符串解码成python对象:json到字典 |
json.dump() | 将python中的对象转化成json储存到文件中 |
json.load() | 将文件中的json的格式转化成python对象提取出来 |
笔记:两个和load相关的方法只是多了一步和文件相关的操作。
json.dumps
和dump相关的两个函数是将Python数据类型转成json类型,转化对照表如下:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
json.dumps
方法的作用是将Python字典类型的数据转成json格式的数据,具体的参数如下:
json.dumps(obj, # 待转化的对象
skipkeys=False, # 默认值是False,若dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None)