深入了解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的知识,希望对你有所帮助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章