欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中json操作之json.loads、json.load、json.jumps及json.jump用法

 更新時間:2022年08月12日 10:31:26   作者:蘭縷啟林  
最近在python里面用json讀取json文件,可是老是不成功,特此記錄一下,下面這篇文章主要給大家介紹了關于python中json操作之json.loads、json.load、json.jumps及json.jump用法的相關資料,需要的朋友可以參考下

前言

經常在Python中對JSON格式的文件進行操作,今天對這些操作做一個總結

首先,需要導入json庫import json

0.python類型與json類型互換表

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

什么是json字符串?

相較于JSON對象,JSON字符串(可以理解為一個普通的字符串但擁有特殊的格式 這種格式可以用來轉換回JSON對象)可以更加方便的在函數之間傳遞。

JSON對象中只能使用雙引號"" 而python對象字典中可以使用單引號''

1.將json字符串轉化(反序列化)

(1)json.loads

將JSON字符串轉化為 Python 字段的數據類型。

loads:針對內存對象,將string轉換為dict (將string轉換為dict)

def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str`` instance containing a JSON
    document) to a Python object."""

json.loads 用于解碼 JSON 數據。該函數返回 Python 字段的數據類型。

jsonData='{"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}'

print(jsonData)
print(type(jsonData)) # <class 'str'> 理解為json字符串

py_type_info=json.loads(jsonData)

print(py_type_info)
print(type(py_type_info)) # <class 'dict'>

# 輸出:
#{"測試": 12345, "內容": ["我也不知道我要寫什么", "123"]}
# <class 'str'>
# {'測試': 12345, '內容': ['我也不知道我要寫什么', '123']}
# <class 'dict'>

可以從上面輸出中看到 JSON 的雙引號 與python dict的單引號

(2)json.load

json.load用于讀取.json格式的文件,將JSON文件 轉化成Python字段的數據類型

load:針對文件句柄,將json格式的字符轉換為dict,從文件中讀取 (將string轉換為dict)

def load(fp, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
    a JSON document) to a Python object."""
with open('abc.json','r',encoding='utf-8')as f:
    py_type_info = json.load(f)
    print(py_type_info)
       with open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "r", encoding='utf-8') as f:
            cmpInfo=json.load(f)

延伸:如果.json文件中有注釋怎么辦

參考資料:Pythonh中用json.load() json.loads()加載json數據的方法

提醒:根據JSON規(guī)范(http://www.json.org, RFC 4627, RFC 7159),不支持注釋

但如果真的不幸遇到json文件中有 // 類似的注釋如何解決?

    def load_json(path):   
    import json
    lines = []     #  第一步:定義一個列表, 打開文件
    with open(path) as f:  
        for row in f.readlines(): # 第二步:讀取文件內容 
            if row.strip().startswith("http://"):   # 第三步:對每一行進行過濾 
                continue
            lines.append(row)                   # 第四步:將過濾后的行添加到列表中.
    return json.loads("\n".join(lines))       #將列表中的每個字符串用某一個符號拼接為一整個字符串,用json.loads()函數加載,這樣就大功告成啦??!

2.將python對象轉化(序列化)

(1)json.dumps

json.dumps 用于將 Python 對象 編碼成 JSON 字符串

注意:這個函數產生的是字符串

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
  • obj:轉化成json的對象。
  • skipkeys:默認值是False,如果dict的keys內的數據不是python的基本類型(str,unicode,int,long,float,bool,None),設置為False時,就會報TypeError的錯誤。此時設置成True,則會跳過這類key 。
  • ensure_ascii=True:默認輸出ASCLL碼,如果把這個該成False,就可以輸出中文。
  • check_circular:如果check_circular為false,則跳過對容器類型的循環(huán)引用檢查,循環(huán)引用將導致溢出錯誤(或更糟的情況)。
  • allow_nan:如果allow_nan為假,則ValueError將序列化超出范圍的浮點值(nan、inf、-inf),嚴格遵守JSON規(guī)范,而不是使用JavaScript等價值(nan、Infinity、-Infinity)。
  • default:default(obj)是一個函數,它應該返回一個可序列化的obj版本或引發(fā)類型錯誤。默認值只會引發(fā)類型錯誤。
  • sort_keys =True:是告訴編碼器按照字典排序(a到z)輸出。如果是字典類型的python對象,就把關鍵字按照字典排序。
  • indent:參數根據數據格式縮進顯示,讀起來更加清晰。
  • separators:是分隔符的意思,參數意思分別為不同dict項之間的分隔符和dict項內key和value之間的分隔符,把:和,后面的空格都除去了。
	j1={'測試':12345,'內容':['我也不知道我要寫什么','123']}
    j1_str=json.dumps(j1)
    print(j1)
	# 輸出:{'測試': 12345, '內容': ['我也不知道我要寫什么', '123']}

(2)json.dump

將Python對象編碼成JSON文件

j1={'測試':12345,'內容':['我也不知道我要寫什么','123']}
with open('abc.json','w') as f:
    json.dump(j1,f)

abc.json中寫入了Python對象j1編碼出的json格式信息:

{"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}

總結

到此這篇關于python中json操作之json.loads、json.load、json.jumps及json.jump用法總結的文章就介紹到這了,更多相關python json操作用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python 基礎教程之包和類的用法

    Python 基礎教程之包和類的用法

    這篇文章主要介紹了Python 基礎教程之包和類的用法的相關資料,需要的朋友可以參考下
    2017-02-02
  • django的auth認證,authenticate和裝飾器功能詳解

    django的auth認證,authenticate和裝飾器功能詳解

    這篇文章主要介紹了django的auth認證,authenticate和裝飾器功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python 文件操作刪除某行的實例

    python 文件操作刪除某行的實例

    下面小編就為大家?guī)硪黄猵ython 文件操作刪除某行的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python如何使用socketserver模塊實現并發(fā)聊天

    python如何使用socketserver模塊實現并發(fā)聊天

    這篇文章主要介紹了python如何使用socketserver模塊實現并發(fā)聊天,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • selenium設置proxy、headers的方法(phantomjs、Chrome、Firefox)

    selenium設置proxy、headers的方法(phantomjs、Chrome、Firefox)

    這篇文章主要介紹了selenium設置proxy、headers的方法(phantomjs、Chrome、Firefox),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 使用tkinter實現三子棋游戲

    使用tkinter實現三子棋游戲

    這篇文章主要為大家詳細介紹了使用tkinter實現三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 基于Python實現繪制簡單動圖的示例詳解

    基于Python實現繪制簡單動圖的示例詳解

    動畫是一種高效的可視化工具,能夠提升用戶的吸引力和視覺體驗,有助于以富有意義的方式呈現數據可視化,本文的主要介紹在Python中兩種簡單制作動圖的方法,需要的可以了解下
    2023-10-10
  • python常規(guī)方法實現數組的全排列

    python常規(guī)方法實現數組的全排列

    這篇文章主要介紹了python常規(guī)方法實現數組的全排列,實例分析了全排列的概念及Python常規(guī)實現技巧,需要的朋友可以參考下
    2015-03-03
  • 淺談matplotlib 繪制梯度下降求解過程

    淺談matplotlib 繪制梯度下降求解過程

    這篇文章主要介紹了淺談matplotlib 繪制梯度下降求解過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 利用python實現3種梯度下降算法

    利用python實現3種梯度下降算法

    梯度下降法是一種優(yōu)化算法,用于求解函數的最小值或最大值,它通過迭代的方式,沿著函數的梯度方向逐步調整參數,以找到函數的極值點,本文給大家介紹了利用python實現3種梯度下降算法,需要的朋友可以參考下
    2023-12-12

最新評論