0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡(luò)工程師學(xué)Python之JSON數(shù)據(jù)交換格式解析

網(wǎng)絡(luò)技術(shù)干貨圈 ? 來(lái)源:網(wǎng)絡(luò)技術(shù)干貨圈 ? 2023-04-21 16:53 ? 次閱讀

JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript語(yǔ)法,但也可以被其他語(yǔ)言如Python解析和生成。Python內(nèi)置了對(duì)JSON的支持,可以輕松地將Python對(duì)象序列化為JSON格式的字符串,以及將JSON字符串反序列化為Python對(duì)象。

JSON和Python對(duì)象的對(duì)應(yīng)關(guān)系

JSON中的數(shù)據(jù)類(lèi)型和Python對(duì)象的對(duì)應(yīng)關(guān)系如下:

JSON Python
object dict
array list
string str
number (int/float) int/float
true True
false False
null None

Python中可以使用json模塊來(lái)進(jìn)行JSON數(shù)據(jù)的處理。

將Python對(duì)象轉(zhuǎn)換為JSON

使用json模塊的dumps()函數(shù)可以將Python對(duì)象轉(zhuǎn)換為JSON格式的字符串。例如,將一個(gè)Python字典轉(zhuǎn)換為JSON格式的字符串:

importjson

data={'name':'Alice','age':20,'is_student':True}
json_str=json.dumps(data)
print(json_str)

輸出結(jié)果為:

{"name":"Alice","age":20,"is_student":true}

可以看到,dumps()函數(shù)將Python字典轉(zhuǎn)換為了JSON格式的字符串。注意,JSON格式的字符串中,字符串需要用雙引號(hào)括起來(lái),而不是單引號(hào)。

將JSON轉(zhuǎn)換為Python對(duì)象

使用json模塊的loads()函數(shù)可以將JSON格式的字符串轉(zhuǎn)換為Python對(duì)象。例如,將上面生成的JSON格式的字符串轉(zhuǎn)換為Python字典:

json_str='{"name":"Alice","age":20,"is_student":true}'
data=json.loads(json_str)
print(data)

輸出結(jié)果為:

{'name':'Alice','age':20,'is_student':True}

可以看到,loads()函數(shù)將JSON格式的字符串轉(zhuǎn)換為了Python字典。

處理JSON文件

可以使用json模塊的dump()函數(shù)和load()函數(shù)來(lái)處理JSON文件。dump()函數(shù)可以將Python對(duì)象序列化為JSON格式的字符串,并將其寫(xiě)入文件中。load()函數(shù)可以從文件中讀取JSON格式的字符串,并將其反序列化為Python對(duì)象。

例如,將Python字典寫(xiě)入JSON文件:

data={'name':'Alice','age':20,'is_student':True}
withopen('data.json','w')asf:
json.dump(data,f)

從JSON文件中讀取Python對(duì)象:

withopen('data.json','r')asf:
data=json.load(f)
print(data)

輸出結(jié)果為:

{'name':'Alice','age':20,'is_student':True}

JSON格式的高級(jí)處理

在處理JSON格式數(shù)據(jù)時(shí),還可以使用json模塊的一些高級(jí)功能。例如,json.JSONEncoder和json.JSONDecoder類(lèi)可以自定義JSON格式的編碼和解碼方式。此外,還可以使用json.JSONEncoder的default()方法和json.JSONDecoder的objecthook()方法來(lái)自定義某些數(shù)據(jù)類(lèi)型的JSON編碼和解碼方式。

下面是一個(gè)示例,展示如何使用json.JSONEncoder和json.JSONDecoder自定義JSON格式的編碼和解碼方式。假設(shè)有一個(gè)Person類(lèi),其對(duì)象包含姓名和年齡兩個(gè)屬性:

classPerson:
def__init__(self,name,age):
self.name=name
self.age=age

現(xiàn)在想要將Person對(duì)象序列化為JSON格式的字符串,并將JSON字符串反序列化為Person對(duì)象。首先,需要定義一個(gè)自定義的JSON編碼器

classPersonEncoder(json.JSONEncoder):
defdefault(self,obj):
ifisinstance(obj,Person):
return{'name':obj.name,'age':obj.age}
returnsuper().default(obj)

PersonEncoder類(lèi)繼承自json.JSONEncoder類(lèi),并覆蓋了default()方法。default()方法接收一個(gè)參數(shù)obj,表示要序列化的Python對(duì)象。如果obj是Person對(duì)象,則將其轉(zhuǎn)換為一個(gè)包含姓名和年齡屬性的字典;否則,調(diào)用父類(lèi)的default()方法進(jìn)行默認(rèn)處理。

然后,可以使用自定義的編碼器將Person對(duì)象序列化為JSON格式的字符串:

person=Person('Alice',20)
json_str=json.dumps(person,cls=PersonEncoder)
print(json_str)

輸出結(jié)果為:

{"name":"Alice","age":20}

可以看到,Person對(duì)象被成功地序列化為了JSON格式的字符串。

接下來(lái),需要定義一個(gè)自定義的JSON解碼器:

classPersonDecoder(json.JSONDecoder):
defobject_hook(self,dct):
if'name'indctand'age'indct:
returnPerson(dct['name'],dct['age'])
returndct

PersonDecoder類(lèi)繼承自json.JSONDecoder類(lèi),并覆蓋了object_hook()方法。object_hook()方法接收一個(gè)參數(shù)dct,表示要反序列化的JSON數(shù)據(jù)。如果dct是包含name和age屬性的字典,則將其轉(zhuǎn)換為一個(gè)Person對(duì)象;否則,返回原始的字典數(shù)據(jù)。

最后,可以使用自定義的解碼器將JSON格式的字符串反序列化為Person對(duì)象:

json_str='{"name":"Alice","age":20}'
person=json.loads(json_str,cls=PersonDecoder)
print(person.name,person.age)

輸出結(jié)果為:

Alice20

可以看到,JSON格式的字符串被成功地反序列化為了Person對(duì)象。

結(jié)論

在Python中,使用json模塊可以輕松地處理JSON格式的數(shù)據(jù)??梢詫ython對(duì)象序列化為JSON格式的字符串,將JSON格式的字符串反序列化為Python對(duì)象,以及處理JSON文件。此外,還可以使用json.JSONEncoder和json.JSONDecoder類(lèi)來(lái)自定義JSON格式的編碼和解碼方式。掌握了這些知識(shí),可以更加靈活地處理JSON格式的數(shù)據(jù).






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    584

    瀏覽量

    20552
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4798

    瀏覽量

    84810
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    119

    瀏覽量

    6981

原文標(biāo)題:網(wǎng)絡(luò)工程師學(xué)Python-19-JSON

文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    華為網(wǎng)絡(luò)工程師培訓(xùn)教材

    華為網(wǎng)絡(luò)工程師培訓(xùn)教材
    發(fā)表于 08-16 17:27

    華為“網(wǎng)絡(luò)工程師”培訓(xùn)專(zhuān)用教程

    華為“網(wǎng)絡(luò)工程師”培訓(xùn)專(zhuān)用教程
    發(fā)表于 08-18 15:12

    如何解決自定義和使用XML數(shù)據(jù)交換格式帶來(lái)的缺陷?

    JSON數(shù)據(jù)交換格式相比XML和傳統(tǒng)數(shù)據(jù)交換格式所具有哪些優(yōu)勢(shì)?如何解決自定義和使用XML數(shù)據(jù)交換格式帶來(lái)的缺陷?
    發(fā)表于 05-27 06:20

    JSON是什么?如何去創(chuàng)建一種JSON?

    1.JSON是一種輕量級(jí)的數(shù)據(jù)交換格式。是一種獨(dú)立于語(yǔ)言的文本格式。輕量級(jí)適合x(chóng)ml相比較。數(shù)據(jù)交換指的是客戶(hù)端和服務(wù)器之間的數(shù)據(jù)傳遞
    發(fā)表于 07-09 07:06

    AIoT智能物聯(lián)網(wǎng)工程師學(xué)習(xí)路線(xiàn)規(guī)劃以及詳細(xì)解析

    大家好,我是老白。今天給大家?guī)?lái)AIoT智能物聯(lián)網(wǎng)工程師學(xué)習(xí)路線(xiàn)規(guī)劃以及詳細(xì)解析。AIoT智能物聯(lián)網(wǎng)工程師學(xué)習(xí)路線(xiàn)詳解AIoT學(xué)習(xí)路線(xiàn)規(guī)劃學(xué)習(xí)階段階段名稱(chēng)主題 階段一Python基礎(chǔ)與
    發(fā)表于 08-23 06:06

    網(wǎng)絡(luò)工程師培訓(xùn)教程(華為HCNE)

    網(wǎng)絡(luò)工程師培訓(xùn)教程(HCNE):華為HCNE-網(wǎng)絡(luò)工程師培訓(xùn)教程(PDF) 01.第一章網(wǎng)絡(luò)基礎(chǔ)知識(shí).pdf02.第二章常見(jiàn)網(wǎng)絡(luò)接口與電纜.pdf03.第三章以太網(wǎng)
    發(fā)表于 06-09 19:20 ?129次下載

    網(wǎng)絡(luò)工程師RCNA教學(xué)內(nèi)容

    網(wǎng)絡(luò)工程師RCNA教學(xué)內(nèi)容 內(nèi)容 OSI網(wǎng)絡(luò)模型和TCP/IP協(xié)議棧子網(wǎng)劃分 交換機(jī)的原理和基本配置          
    發(fā)表于 03-26 17:33 ?41次下載

    基于J2ME/J2EE的JSON數(shù)據(jù)交換的探討

    分析JSON數(shù)據(jù)交換格式,并提出在客戶(hù)端(J2ME)與服務(wù)器端(J2EE)之間采用JSON數(shù)據(jù)交換格式的框架。對(duì)于輕量級(jí)應(yīng)用,該框架可節(jié)省客戶(hù)端的計(jì)算資源,提高
    發(fā)表于 12-30 16:10 ?0次下載

    合格的網(wǎng)絡(luò)工程師必會(huì)實(shí)驗(yàn)大全

    合格的網(wǎng)絡(luò)工程師必會(huì)實(shí)驗(yàn)大全.pdf合格的網(wǎng)絡(luò)工程師必會(huì)實(shí)驗(yàn)大全.pdf
    發(fā)表于 10-30 17:46 ?0次下載

    2004-2012網(wǎng)絡(luò)工程師試題

    2004-2012網(wǎng)絡(luò)工程師試題是工程師學(xué)習(xí)通關(guān)的必備書(shū)籍
    發(fā)表于 06-17 16:33 ?0次下載

    android使用JSON進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換

    本文將快速講解 JSON 格式,并通過(guò)代碼示例演示如何分別在客戶(hù)端和服務(wù)器端進(jìn)行 JSON 格式數(shù)據(jù)的處理。 什么是
    發(fā)表于 12-04 11:51 ?0次下載

    一文解析網(wǎng)絡(luò)工程師到底是干什么的

    都說(shuō)網(wǎng)絡(luò)工程師吃香,可是到底網(wǎng)絡(luò)工程師是干什么的?還真的沒(méi)有幾個(gè)人能夠說(shuō)得出來(lái)。今天我們就來(lái)了解一下網(wǎng)絡(luò)工程師。在了解和網(wǎng)絡(luò)工程師的工作之前,我們先了解,
    發(fā)表于 01-03 15:32 ?1.8w次閱讀

    什么是網(wǎng)絡(luò)工程師

    什么是網(wǎng)絡(luò)工程師?網(wǎng)絡(luò)工程師就是通過(guò)學(xué)習(xí)和訓(xùn)練,掌握了網(wǎng)絡(luò)技術(shù)的理論知識(shí)和操作技能的網(wǎng)絡(luò)技術(shù)人員。網(wǎng)絡(luò)工程師能夠從事計(jì)算機(jī)信息系統(tǒng)的設(shè)計(jì)、建
    的頭像 發(fā)表于 02-19 14:28 ?7682次閱讀

    什么是JSON JSON的語(yǔ)法規(guī)則

    )的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器
    的頭像 發(fā)表于 08-25 15:40 ?2659次閱讀

    網(wǎng)絡(luò)工程師學(xué)Python-for循環(huán)

    Python 中,for 循環(huán)是一種常用的結(jié)構(gòu),用于遍歷序列(如列表、元組、字符串)中的元素。
    的頭像 發(fā)表于 04-19 15:47 ?955次閱讀