欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深入了解JSON

程序员文章站 2022-03-13 20:54:41
...

因为这几天的工作主要是把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格式,即使集合是作为列表的元素也是不可以的

深入了解JSON深入了解JSON

通过json.dumps()方法转换之后的json数据对于python来说就是字符串

深入了解JSON

3. 将json数据转换成python数据结构

将json的数据结构转换成python数据结构使用的是json.loads()方法

深入了解JSON

转换成python数据结构之后,我们就可以用python的语法来对数据进行操作。


从文件加载json数据

如果json数据保存在以文件的形式保存,可以使用json.load()方法直接从文件中读取json数据转为python的数据结构:

深入了解JSON

事实上,我理解的是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()方法

深入了解JSON

通过以上代码,你就会在当前目录得到一个test.json文件,里面的数据就是符合json数据结构的数据。同样,将python数据写入到json文件也要遵守python转json的规则,数据内容不能包括集合。


为什么不能将集合转换为JSON数据?

同样是序列为什么list和dict都可以,set却不可以?打着这样的疑问,我翻了翻json库的源码

里面有官方写的数据对应表:

深入了解JSON

里面这一段话的意思就是,默认就支持以上类型的数据,如果想要支持更多的数据类型,可以继承并重写.default()方法

注意重写后default()方法的返回值,必须符合json库支持的原始数据类型

我们按照官方的说法来实现一下:

深入了解JSON

可以看到结果是成功的,传入的集合被转换成了列表

看到这里不知道你们有没有一个疑问,为什么重写后的类是传给参数cls

当然这个我是在源码的解释里面发现的

深入了解JSON

如果你重写了JSONEncoder子类,就要把这个子类传递给cls这个参数,不然就会使用默认的JSONEncoder

在查看源码的时候,我还发现了一个参数default,这是官方对这个参数的解释

深入了解JSON

就是说我们可以直接重写default()方法,然后通过default参数传进去,不用通过继承JSONEncoder类

我们实现一下:

深入了解JSON

可以看到,直接重写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的知识,希望对你有所帮助!

相关标签: python