深入了解JSON
因为这几天的工作主要是把excel表格的数据转换为json数据接口,所以借此机会来深入了解一下Json
在此之前,我接触的大多数json数据接口都是类似python字典的接口,所以天真地以为把json当做python的字典来用就可以了
但是我发现列表结构的数据也是可以转换成json格式的,甚至是一个简单的数字,一个字符串或者布尔类型都是可以转换为json格式数据的
于是我查阅了json数据的组成,总结了以下知识点
JSON数据的组成
语法规则
JSON是一个标记符的序列,它的标记符包括六个构造字符
、字符串
、数字
、三个字面名(false、true、null)
1. 说一下什么是构造字符
构造字符就是组成json数据接口的字符,不包括数据内容,json有6个构造字符分别是:
-
[ 左方括号
-
] 右方括号
-
{ 左大括号
-
} 右方括号
-
: 冒号
-
, 逗号
这些就是除了数据体外的构造字符
2. json数据的值类型
json的值可以是对象、数组、数字、字符串、三个字面名(false、true、null)
-
对象:json的对象就是对应python的字典,由一个个的键值对构成
-
数组:json的数组,可以由python的列表或者元组转换而成,但不能是集合类型
-
字符串:和python的字符串类型对应
-
false:对应python的布尔值False
-
true:对应python的布尔值True
-
null:对应python的None
python构建json数据
python可以使用json库
来读取和转换json数据
1. 首先我们通过import json
来导入json库
这个库是python自带的内置标准库,不需要安装就可以使用。
import json
2. 转换json数据
将python的数据接口转换为json数据结构使用的是json.dumps()
方法
上面说到不能将集合类型转换为json格式,即使集合是作为列表的元素也是不可以的
通过json.dumps()
方法转换之后的json数据对于python来说就是字符串
3. 将json数据转换成python数据结构
将json的数据结构转换成python数据结构使用的是json.loads()
方法
转换成python数据结构之后,我们就可以用python的语法来对数据进行操作。
从文件加载json数据
如果json数据保存在以文件的形式保存,可以使用json.load()
方法直接从文件中读取json数据转为python的数据结构:
事实上,我理解的是json.load()
方法传入的是一个可读的json结构数据流
这是源码里面官方的解释:
Deserialize
fp
(a.read()
-supporting file-like object containing a JSON document) to a Python object.
将json数据直接写入文件
既然可以直接从文件中读取json数据,那么python也是可以直接将json数据写入到文件里面中去的。
将json数据写入文件用到的是json.dump()
方法
通过以上代码,你就会在当前目录得到一个test.json文件,里面的数据就是符合json数据结构的数据。同样,将python数据写入到json文件也要遵守python转json的规则,数据内容不能包括集合。
为什么不能将集合转换为JSON数据?
同样是序列为什么list和dict都可以,set却不可以?打着这样的疑问,我翻了翻json库的源码
里面有官方写的数据对应表:
里面这一段话的意思就是,默认就支持以上类型的数据,如果想要支持更多的数据类型,可以继承并重写.default()方法
注意重写后default()方法的返回值,必须符合json库支持的原始数据类型
我们按照官方的说法来实现一下:
可以看到结果是成功的,传入的集合被转换成了列表
看到这里不知道你们有没有一个疑问,为什么重写后的类是传给参数cls
?
当然这个我是在源码的解释里面发现的
如果你重写了JSONEncoder子类
,就要把这个子类传递给cls
这个参数,不然就会使用默认的JSONEncoder
在查看源码的时候,我还发现了一个参数default
,这是官方对这个参数的解释
就是说我们可以直接重写default()方法,然后通过default参数传进去,不用通过继承JSONEncoder类
我们实现一下:
可以看到,直接重写default方法也是可以的
JSON定义
读到这里,你已经基本掌握了python怎么加载和转换json数据,那么json到底是个什么东西呢?
简介
JSON的全称JavaScript Object Notation,中文意思就是JavaScript对象表示法,由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言。
尽管JSON是
JavaScript
的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言
家族的一些习惯JSON 数据格式与语言无关。即便它源自
JavaScript
,但当前很多编程语言都支持 JSON 格式数据的生成和解析
应用领域
WEB开发
JSON最开始被广泛的应用于WEB应用的开发。不过当前JSON使用在JavaScript、Java]、Node.js应用的情况比较多,PHP、C#等开发的WEB应用主要还是使用XML
NoSQL数据库
相对于传统的
关系型数据库
,一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDB、CouchDB、RavenDB等
以上就是我查阅了学习到关于Json的知识,希望对你有所帮助!