因爲這幾天的工作主要是把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的知識,希望對你有所幫助!