Python如何讀寫JSON格式數(shù)據(jù)
JSON格式數(shù)據(jù)簡介
JSON 全稱“JavaScript Object Notation”,譯為“JavaScript 對象簡譜”或“JavaScript 對象表示法”,是一種輕量級的、基于文本的、開放的數(shù)據(jù)交換格式。JSON 在 Web 開發(fā)領域有著舉足輕重的地位,如果您想在 Web 開發(fā)領域大展身手的話,就必須了解 JSON。通俗點來說Json是一種文本格式,常用于數(shù)據(jù)存儲。
基本結構為鍵: 值,鍵僅可以為字符串,而值可以是字符串,列表,數(shù)字,或者另一些鍵值對。
下面這段數(shù)據(jù)很好的展示了不同形式的Json結構:
{
"max": 1,
"1": {
"user": 825882638,
"type": "image"
"title": "超人"
},
"a": [
"芝麻開門",
{
"a": 2
},
"b"
],
"c": {
"d": 888
"g": 888
}
}
注意:所有Json文本最外層都必須有{}
使用Python讀寫JSON格式數(shù)據(jù)
接下來我們就以上面這個Json文本為樣板講解一下Json文件的解析。
在Python當中,如果我們要解析Json文件,就必須先導入Python安裝時自帶的json庫,即import json,之后才可以進行json操作。
1.讀取json文件
下面的代碼告訴了我們如何讀入一個json文件
with open("./new.json", "r", encoding="utf-8") as f:
content = json.load(f)
json.load是直接從文件讀取json文本,而json.loads是讀取進行了json編碼的文本而非本地文件。
上述代碼即從當前目錄下的"new.json"文件當中讀入json數(shù)據(jù),隨后json.load方法會將讀入的json文本轉換成Python當中的字典存入content變量當中。而在Python中操作JSON格式數(shù)據(jù)實際上就是操作字典、列表所組成的組合數(shù)據(jù)類型。
例如我們現(xiàn)在想要在上面的json文本當中提取最下面的"d"的值(代碼中1號位置),可以這么操作val=content[“c”][“d”],這樣就可以取到d的值,也就是333了。除此之外上例我們還可以看到[]包裹的列表,如果我們想取到其中的"a"(代碼中2號位置)的值,應該這么寫:val=content[“a”][1][“a”],此時val的值為2。
2.寫入json文件
with open("./new.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
上述代碼用于向json文件當中寫入data數(shù)據(jù),其中dump方法擁有很多參數(shù),這里只講上面代碼中的三個,其他的請自行查閱。
obj:即上述第一個參數(shù),用于傳入需要寫入Json文件當中的數(shù)據(jù)。
fp:即上述第二個參數(shù),用于傳入需要寫入Json數(shù)據(jù)的文本指針
indent:傳入Json文件換行縮進量,一般為2或者4。
ensure_ascii:是否允許Ascii碼。若為True(默認),則輸入的中文全會轉化為\uXXXX存儲。
自己編寫一個JsonUtils
代碼來源于github上一個大佬,如何使用的話代碼注釋給出了詳細說明!
import json, os
class JsonUtils():
relative_url = "./data/"
abstract_url = "file:///home/ubuntu/qqbot/data/rpg/"
@staticmethod
def __preBuildFile(file: str, *default: Union[str, dict]) -> bool:
"""
判斷文件及路徑是否存在,若不存在則創(chuàng)建并生成對應文件內容
:param file: 文件路徑
:param default: 默認文件內容
:return:
"""
if (not os.path.exists(file)):
path = os.path.split(file)
if (not os.path.exists(path[0])):
os.mkdir(path[0])
with open(file, "w", encoding=utf-8") as f:
if (default):
arg = default[0]
if (isinstance(arg, str)):
f.write(arg)
elif (isinstance(arg, dict)):
try:
js = json.dumps(arg, indent=4, ensure_ascii=False)
f.write(js)
except json.JSONEncoder:
return False
else:
f.write(str(arg))
else:
f.write("")
return True
@classmethod
async def read(cls, filename: str, *default) -> Tuple[dict, bool]:
"""
讀取指定json文件
:param filename: 文件路徑
:param default: 若無此文件,創(chuàng)建該文件時寫入的內容
:return: [讀取到的內容, 是否為新創(chuàng)建的文件]
"""
file_url = cls.relative_url + filename
if (default):
res = JsonUtils.__preBuildFile(file_url, default[0])
else:
res = JsonUtils.__preBuildFile(file_url)
with open(file_url, "r", encoding="utf-8") as f:
content = json.load(f)
return (content, res)
@classmethod
async def write(cls, filename: str, data: dict) -> None:
"""
寫入Json數(shù)據(jù)
:param filename: 文件路徑
:param data: 寫入的數(shù)據(jù)
:return:
"""
file_url = cls.relative_url + filename
JsonUtils.__preBuildFile(file_url)
with open(file_url, "w", encoding="utf-8") as f:
content = json.dumps(data, indent=4, ensure_ascii=False)
f.write(content)
到此這篇關于Python如何讀寫JSON格式數(shù)據(jù)的文章就介紹到這了,更多相關Python讀寫JSON數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Keras中Conv1D和Conv2D的區(qū)別說明
這篇文章主要介紹了基于Keras中Conv1D和Conv2D的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python下函數(shù)參數(shù)的傳遞(參數(shù)帶星號的說明)
python中函數(shù)參數(shù)的傳遞是通過賦值來傳遞的。2010-09-09
樹莓派4B+opencv4+python 打開攝像頭的實現(xiàn)方法
這篇文章主要介紹了樹莓派4B+opencv4+python 打開攝像頭的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
Python文件遍歷os.walk()與os.listdir()使用及說明
這篇文章主要介紹了Python文件遍歷os.walk()與os.listdir()使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Python神經網絡TensorFlow基于CNN卷積識別手寫數(shù)字
這篇文章主要介紹了Python神經網絡TensorFlow基于CNN卷積識別手寫數(shù)字的實現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
2021年值得向Python開發(fā)者推薦的VS Code擴展插件
這篇文章主要介紹了2021年值得向Python開發(fā)者推薦的VS Code擴展插件,幫助大家更好的利用vscode進行python的開發(fā),感興趣的朋友可以了解下2021-01-01

