Python讀寫JSON文件的操作詳解
JSON
JSON 起源
JSON 全稱 JavaScript Object Notation 。是處理對象文字語法的 JavaScript 編程語言的一個子集。JSON 早已成為與語言無關(guān)的語言,并作為自己的標(biāo)準(zhǔn)存在。
JSON 樣例
{ "data":[ { "id": "1", "name": "A同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同學(xué)", "state": "0", "createTime": "2020-01-21" } ] }
Python 原生支持 JSON
Python 帶有一個內(nèi)置包 json,用于對 JSON 數(shù)據(jù)進(jìn)行編碼和解碼。
引用方式。
import json
JSON 編碼的過程通常稱為序列化。該術(shù)語是指將數(shù)據(jù)轉(zhuǎn)換為一系列字節(jié)通過網(wǎng)絡(luò)存儲或傳輸。反序列化是解碼以 JSON 標(biāo)準(zhǔn)存儲或交付的數(shù)據(jù)的交互過程。
序列化 JSON
直觀的轉(zhuǎn)換將簡單的 Python 對象轉(zhuǎn)換為 JSON。
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str | string |
int, long,float | number |
True | true |
False | false |
None | null |
簡單的序列化示例
創(chuàng)建一個簡單的數(shù)據(jù)。
data = { "data":[ { "id": "1", "name": "A同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同學(xué)", "state": "0", "createTime": "2020-01-21" } ] }
數(shù)據(jù)直接以文本方式保存。
with open("data_file.json", "w") as f: json.dump(data, f)
數(shù)據(jù)直接以字符串方式使用。
json_str = json.dumps(data)
JSON 反序列化
在 json 庫中使用 load() 和 oads() 用于將 JSON 編碼數(shù)據(jù)轉(zhuǎn)換為 Python 對象。
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number(整數(shù)) | int |
number(浮點數(shù)) | float |
true | True |
false | False |
null | None |
簡單的反序列化示例
讀取寫入json文件的數(shù)據(jù)。
with open("data_file.json", "r") as read_file: data = json.load(read_file)
字符串?dāng)?shù)據(jù)。
json_string = """ { "data":[ { "id": "1", "name": "A同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同學(xué)", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同學(xué)", "state": "0", "createTime": "2020-01-21" } ] } """ data = json.loads(json_string)
應(yīng)用案例
通過互聯(lián)網(wǎng)的數(shù)據(jù)抓取解析文本信息。
# 秦皇島煤炭網(wǎng)微博 import requests from bs4 import BeautifulSoup import datetime url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid" post_param = {'pageNum':'1','pageSize':'20','jsonStr':'{"typeid":"238"}'} return_data = requests.post(url,data =post_param) return_data = return_data.content.decode("utf-8") import json for i in json.loads(return_data)["rows"]: title = i["title"] url = "http://news.cqcoal.com/blank/nc.jsp?mid="+str(i["id"]) timeStamp=int(i["pubdate"]) dateArray = datetime.datetime.utcfromtimestamp(timeStamp) date = dateArray.strftime("%Y-%m-%d") print(title,url,date)
編碼和解碼
自定義數(shù)據(jù)。
import json # 基礎(chǔ)的數(shù)字字典 py_object = {"c": 0, "b": 0, "a": 0} # JSON 編碼 json_string = json.dumps(py_object) print(json_string) print(type(json_string)) {"c": 0, "b": 0, "a": 0} <class 'str'> # JSON 解碼 py_obj = json.loads(json_string) print(py_obj) print(type(py_obj)) {'c': 0, 'b': 0, 'a': 0} <class 'dict'>
如果遇到 TypeError: Object of type SampleClass is not JSON serializable 的錯誤就需要自定義編碼和解碼了。
import json class Student: def __init__(self, name, roll_no, address): self.name = name self.roll_no = roll_no self.address = address def to_json(self): ''' 將此類的實例轉(zhuǎn)換為 json ''' return json.dumps(self, indent = 4, default=lambda o: o.__dict__) class Address: def __init__(self, city, street, pin): self.city = city self.street = street self.pin = pin address = Address("Bulandshahr", "Adarsh Nagar", "203001") student = Student("Raju", 53, address) # 編碼 student_json = student.to_json() print(student_json) print(type(student_json)) { "name": "Raju", "roll_no": 53, "address": { "city": "Bulandshahr", "street": "Adarsh Nagar", "pin": "203001" } } <class 'str'> # 解碼 student = json.loads(student_json) print(student) print(type(student)) {'name': 'Raju', 'roll_no': 53, 'address': {'city': 'Bulandshahr', 'street': 'Adarsh Nagar', 'pin': '203001'}} <class 'dict'>
以上就是Python讀寫JSON文件的操作詳解的詳細(xì)內(nèi)容,更多關(guān)于Python讀寫JSON的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
numpy和tensorflow中的各種乘法(點乘和矩陣乘)
這篇文章主要介紹了numpy和tensorflow中的各種乘法(點乘和矩陣乘),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)
本文主要介紹了如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Anaconda最新版2023安裝教程Spyder安裝教程圖文詳解
這篇文章主要介紹了Anaconda最新版2023安裝教程Spyder安裝教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Django框架cookie和session方法及參數(shù)設(shè)置
這篇文章主要為大家介紹了Django框架cookie和session參數(shù)設(shè)置及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Python創(chuàng)建7種不同的文件格式的方法總結(jié)
今天的這篇文章呢,小編來介紹一下如何通過Python來創(chuàng)建各種形式的文件,這里包括了:文本文件、CSV文件、Excel文件、壓縮文件、XML文件、JSON文件和PDF文件,需要的可以參考一下2023-01-01