Python 標準庫之 JSON

2021-03-02 Python空間

寫在之前

我用了兩天的時間來介紹的 XML,如果沒看的話建議先去看看。就數據傳遞而言, XML 是一種選擇,當然這裡還有另一種選擇 -- 「JSON」。它是一種輕量級的數據交換格式,如果各位想要做 Web 編程的話,則肯定會用到它。下面我們就開始今天的學習。

JSON

首先我們參考《維基百科》中的相關內容,來對 JSON 做如下介紹:

JSON ( JavaScript Object Notation ) 是一種由道格拉斯構想設計、輕量級的數據交換語言,以文字為基礎,且易於讓人閱讀。儘管 JSON 是 JavaScript 的一個子集,但 JSON 是獨立於語言的文本格式,並且採用了類似 C 語言家族的一些習慣。

關於 JSON 更為詳細的內容,可以參考其官方網站,在這我截取部分內容,讓大家更好的了解一下 JSON 的結構。

JSON 構建於兩種結構基礎之上:

Python 標準庫中有 JSON 模塊,主要是執行序列化和反序列化功能。

基本操作

JSON 模塊相比於 XML 來說真的是簡單多了:

>>> import json
>>> json.__all__
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

1.encoding:dumps()

>>> data = [{'name':'rocky','like':('python','c++'),'age':23}]
>>> data
[{'name': 'rocky', 'like': ('python', 'c++'), 'age': 23}]
>>> data_json = json.dumps(data)
>>> data_json
'[{"name": "rocky", "like": ["python", "c++"], "age": 23}]'

encoding 的操作比較簡單,請仔細觀察一下上面代碼中 data 和 data_json 的不同:like 的值從元組變成了列表,其實還有不同,請看下面:

>>> type(data)
<class 'list'>
>>> type(data_json)
<class 'str'>

2.decoding:loads()

decoding 的過程其實也像上面那麼簡單:

>>> new_data = json.loads(data_json)
>>> new_data
[{'name': 'rocky', 'like': ['python', 'c++'], 'age': 23}]

上面需要注意的是,解碼之後並沒有將值中的列表還原為數組。上面的 data 都不是很長,還能湊活著看,如何很長,閱讀其實就很有難度了。所以 JSON 的 dumps() 提供了可選的參數,利用它們能在輸入上對人更好,當然這個對機器來說都是無所謂的事情。

>>> data1 = json.dumps(data,sort_keys = True,indent = 2)
>>> print(data1)
[
 {
   "age": 23,
   "like": [
     "python",
     "c++"
   ],
   "name": "rocky"
 }
]

sort_keys = True 的意思是按照鍵的字典順序排序;indent = 2 則是讓每個鍵值對顯示的時候,以縮進兩個字符對齊,這樣的視覺效果就好多了。

大 JSON 字符串

其實如果數據不是很大的話,上面的那些基本操作就足夠了。但現在不是都講究什麼都是「大數據」嘛,很多人都在吹噓自己是大數據,顯然不能讓 JSON 總是很小。

事實上對於真正的大數據,再大的 JSON 也不夠,前面的操作方法是將數據都讀入內存,如果數據太大的話就會溢出。那麼這個時候該怎麼辦呢?別怕,我們是 Python 啊,早都想到了,Python 中提供了一個 tempfile 的模塊解決此類問題。這裡需要注意的是,跟上面已經用過的函數相比是不同的,請仔細觀察。

>>> import tempfile
>>> data = [{'name':'rocky','like':('python','c++'),'age':23}]
>>> f = tempfile.NamedTemporaryFile(mode = 'w+')
>>> json.dump(data,f)
>>> f.flush()
>>> print(open(f.name,'r').read())
[{"name": "rocky", "like": ["python", "c++"], "age": 23}]

寫在之後

差不多 JSON 就是這些內容了,是不是比起 XML 真的少了很多,也簡單了很多?但是簡單歸簡單,內容還是不能小覷的,上面的代碼例子什麼的,該看看,該在交互模式自己敲一敲就敲一敲,切勿眼高手低。

如果你覺得本篇文章對你有幫助的話,歡迎點讚,如果你有什麼問題的話,歡迎在後臺或者加微信聯繫我。

The end。

相關焦點

  • Python處理json總結
    跟python中的字典看起來很像,兩者之間的區別?1)json的key只能是字符串,dict的key可以是任何可hash的對象,例如:字符串、數字、元組等;2)字典是一種數據結構,json是一種數據格式;字典有很多內置函數,有多種調用方法,而json是數據打包的一種格式,並不像字典具備操作性;3)json的字符串強制用雙引號,dict的字符串可以用單引號、雙引號;一般而言,我們會把json轉化為python
  • 用 Python 操作 JSON 類型數據詳解
    Python操作JSONPythone3標準庫有JSON模塊,主要執行序列化和反序列化功能。data ={'name':"wangwu" , 'lang': ('python' ,'java'), 'age':20 }data_json = json.dumps( data )print( data)# 輸出結果為[{'name': 'wangwu', 'lang': ('python', 'java'), 'age': 20}]
  • 【python】讀取json文件
    JSON在python中分別由list和dict組成。這是用於序列化的兩個模塊:json: 用於字符串和python數據類型間進行轉換pickle: 用於python特有的類型和python的數據類型間進行轉換Json模塊提供了四個功能:dumps、dump、loads、loadpickle模塊提供了四個功能:dumps、dump、loads、load細節注意:
  • Python 讀取 JSON 數據的騷操作
    >>> from urllib.request import urlopen>>> import json>>> u = urlopen('http://search.twitter.com/search.json?
  • python如何編碼解碼解析json對象
    前言json是一種以鍵值對形式存在的輕量級的數據結構,和python中的字典類型具有相同的表現結構。使用 JSON 函數需要導入 json 庫:import json。在Java中我們知道json有jsonObject和jsonArray,且可以通過String、map等相互轉換,那麼在python中,json對象是如何來讀取解析的呢?python解析json對象1.json.dumpsjson.dumps用於將 Python 對象編碼成 JSON 字符串。
  • Python中json模塊的使用介紹
    # json:數據交換用到json文件,json是特殊的字符串,一種輕量級的數據交換格式# json 本質就是字符串,區別在於
  • python讀寫json文件
    輸出結果,最外圍是一個字典,而字典的值既可以是基本的數據類型,比如數值,字符串,又可以是列表,字典等數據結構,相互嵌套,就構成了整個json文件。對於json文件的讀寫,也稱之為json的編碼和解碼。所謂解碼,就是將文字格式的json轉換為程式語言中的對象,編碼則相反,將程式語言中的對象轉換為json格式的字符串。
  • python教程實戰,json、csv等讀寫
    python教程實戰,json、csv等讀寫JSON的全稱是」JavaScript Object Notation」,意思是JavaScript
  • python解析json方法
    最近在學ES,往裡面灌數據,ES默認格式是json,因此需要用到python去處理json格式。
  • Python對CSV文件的處理
    在Python中,讀取csv文件使用到的標準庫是csv,直接導入就可以了,要讀取的CSV文件內容為:見讀取CSV文件裡面內容的源碼:#!/usr/bin/env python #-*-coding:utf-8-*-#author:wuyaimport  csvdef readCsv(): with open('csvTest.csv','r') as f: rander=csv.reader(f) #對數據循環獲取
  • Python 如何將字符串轉換成 json ?
    但是裡面出現了一些問題通過json來轉換:In [1]: import jsonIn [2]: mes = '{"InsId": 2, "name": "lege-happy", "CreationTime": "2019-07-18T03:18:02Z"}'In [3]: mes_to_dict = json.loads
  • 如何利用Python處理JSON格式的數據,建議收藏!!!
    json和pickle兩個json模塊和pickle都提供了四個方法:dumps, dump, loads, load序列化:將python的數據轉換為json格式的字符串反序列化:將json格式的字符串轉換成python的數據類型首先我們來看一下序列化是如何操作的,我們首先用json.dump()將字典寫入json格式的文件中能夠進行類似操作的則是dataframe當中的
  • 標準庫的自我介紹
    熟悉「標準庫」是學習編程必須要做的事,所以今天我們就來學習一下標準庫。'}>>> pprint.pprint(a){'age': '23', 'like': 'python', 'name': 'rocky'}在對模塊進行說明的過程中,我以 pprint 為例。
  • 如何利用Python處理JSON格式的數據接口(詳細版)
    location=shanghai&output=json&ak=3p49MVra6urFRGOT9s8UWr2'r = requests.get(url)#json格式json_response = r.content.decode()參數output=json,ak是註冊後得到的,使用get方法獲取。
  • 乾貨|如何利用Python處理JSON格式的數據,建議收藏!
    和pickle兩個json模塊和pickle都提供了四個方法:dumps, dump, loads, load序列化:將python的數據轉換為json格式的字符串反序列化:將json格式的字符串轉換成python的數據類型
  • 如何使用Python 和 Pandas讀寫JSON文件
    在第一部分中,我們將使用Python包json來創建一個JSON文件並寫入一個JSON文件。在下一部分中,我們將使用Pandas的 json方法將JSON文件加載到Pandas 數據幀中。在這裡,我們將學習如何從本地和一個URL讀取JSON文件,以及如何使用Pandas讀取一個嵌套的JSON文件。
  • Python 標準庫之 OS
    本文字數:4255 字閱讀本文大概需要:11 分鐘寫在之前在昨天的文章(Python 標準庫之 sys & copy)中,我們介紹了 Python 標準庫中的 sys 和 copy,不知道你掌握了多少。
  • Python之數據序列化(json、pickle、shelve)
    >>> stu={"name": "小明", "age" : 16}>>> stu_json = json.dumps(stu)>>> print(stu_json)'{"name": "\u5c0f\u660e", "age": 16}'>>> stu_json01
  • 4個小竅門,讓你在Python中高效使用JSON!
    可通過以下方式導入:import json解碼JSON字符串很簡單,直接輸入 json.loads(…) 即可。它可以轉換成:· 字典對象· 列表數組· 識別布爾值、整數、浮點數和字符串,在Python中進行正確轉換。
  • Python程式設計師進階之路:從新手到高手的100個模塊
    ,真實反映了 python 程式設計師在成長過程中的一些困惑。英漢小詞典pythoneer - 指所有用python語言開發程序的人pythonista - 意為資深的、追求質量和品味的python開發者本文所列舉的這100個模塊,是在工作和學習中用過的或者正在學習的,算是學習總結。希望對處在迷茫中的程式設計師有所幫助。