深入瞭解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的知識,希望對你有所幫助!

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