这篇文章的由来是因为上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,由于python中,json和dict很是相似,都是key-value的形式,为啥还要这么传参,在群里问了一些人,也说不出个因此然了,仍是本身动手丰衣足javascript
食,因此才有这篇和编辑分类格格不入的文章。来先看一下它们各自的定义。java
python中,json和dict很是相似,都是key-value的形式,并且json、dict也能够很是方便的经过dumps、loads互转。既然都是key-value格式,为啥还须要进行格式转换?python
json(JavaScript Object Notation)
json
json:是一种数据格式,是纯字符串。能够被解析成Python的dict或者其余形式。数组
dict:是一个完整的数据结构,是对Hash Table这一数据结构的一种实现,是一套从存储到提取都封装好了的方案。它使用内置的哈希函数来规划key对应value的存储位置,从而得到O(1)的数据读取速度。数据结构
一、json的key只能是字符串,python的dict能够是任何可hash对象(hashtable type); 函数
二、json的key能够是有序、重复的;dict的key不能够重复。post
三、json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。ui
四、json任意key存在默认值undefined,dict默认没有默认值;编码
五、json访问方式能够是[],也能够是.,遍历方式分in、of;dict的value仅能够下标访问。
六、json的字符串强制双引号,dict字符串能够单引号、双引号;
七、dict能够嵌套tuple,json里只有数组。
八、json:true、false、null
九、python:True、False、None
十、json中文必须是unicode编码,如"\u6211".
十一、json的类型是字符串,字典的类型是字典。
一个对象当其声明周期内的hash值不发生改变,并且能够跟其余对象进行比较时,这个对象就是hashtable的。
一、python中的基本类型都是Hashtable,如str、bytes、数字类型、tuple等;
二、用户自定义的类型默认都是hashtable,由于它们的hash值就是id()值;
三、frozenset始终都是hashtable的,由于它们全部的项目都是被定义成hashtable的;
四、只有当tuple内的全部项都是hashtable的时候,tuple才是hashtable;
实际上JSON就是Python字典的字符串表示,可是字典做为一个复杂对象是没法直接转换成定义它的代码的字符串,字典是一个数据的结构,而json只是一个具备必定规则的字符串,方便在不一样平台上处理其中包含的数据。
但本质上来说,字典是一种数据结构,json是一种格式;字典有不少内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具有操做性,而且是格式就会有一些形式上的限制,好比json的格式要求必须且只能使用双引号做为
key或者值的边界符号,不能使用单引号,并且“key”必须使用边界符(双引号),但字典就无所谓了。
形式上的相近也让python提供了json.loads()转换函数,方便json数据的调用