您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Python怎么讀寫JSON文件”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
JSON 全稱 JavaScript Object Notation 。是處理對(duì)象文字語(yǔ)法的 JavaScript 編程語(yǔ)言的一個(gè)子集。JSON 早已成為與語(yǔ)言無關(guān)的語(yǔ)言,并作為自己的標(biāo)準(zhǔn)存在。
{ "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 帶有一個(gè)內(nèi)置包 json,用于對(duì) JSON 數(shù)據(jù)進(jìn)行編碼和解碼。
引用方式。
import json
JSON 編碼的過程通常稱為序列化。該術(shù)語(yǔ)是指將數(shù)據(jù)轉(zhuǎn)換為一系列字節(jié)通過網(wǎng)絡(luò)存儲(chǔ)或傳輸。反序列化是解碼以 JSON 標(biāo)準(zhǔn)存儲(chǔ)或交付的數(shù)據(jù)的交互過程。
直觀的轉(zhuǎn)換將簡(jiǎn)單的 Python 對(duì)象轉(zhuǎn)換為 JSON。
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str | string |
int, long,float | number |
True | true |
False | false |
None | null |
創(chuàng)建一個(gè)簡(jiǎn)單的數(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 庫(kù)中使用 load() 和 oads() 用于將 JSON 編碼數(shù)據(jù)轉(zhuǎn)換為 Python 對(duì)象。
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number(整數(shù)) | int |
number(浮點(diǎn)數(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)
通過互聯(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 的錯(cuò)誤就需要自定義編碼和解碼了。
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): ''' 將此類的實(shí)例轉(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文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。