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

Python?中的json常見(jiàn)用法實(shí)例詳解

 更新時(shí)間:2022年12月28日 15:21:00   作者:小樓夜聽雨QAQ  
這篇文章主要介紹了Python?中的json常見(jiàn)用法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

博主在開發(fā)一些C端小軟件時(shí),喜歡用json作為序列化方案,故總結(jié)下python中json庫(kù)常見(jiàn)用法。

導(dǎo)包

自帶的庫(kù),無(wú)需額外安裝。

import json

api介紹

序列化:

這里可以理解為將python中的各種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為json字符串的過(guò)程。

涉及api:dump、dumps

反序列化

將輸入的json字符串,轉(zhuǎn)化為python對(duì)象的過(guò)程。

涉及api:load、loads

加s和不加s的區(qū)別:

以反序列化為例,如果需要從文件中讀取數(shù)據(jù),則使用load,直接傳入文件描述符。

簡(jiǎn)而言之,就是需要從文件中讀寫數(shù)據(jù)時(shí),使用load、dump,否則使用loads、dumps

常見(jiàn)用法

json轉(zhuǎn)python內(nèi)置對(duì)象

json會(huì)被適當(dāng)?shù)剞D(zhuǎn)化為python中的list或者dic類型的對(duì)象。

字典對(duì)象

代碼示例:

user_dic = json.loads('{"name": "admin", "age": 20, "children": {"name": "child1", "age": 1}}')
print(type(user_dic))
print(user_dic)

運(yùn)行結(jié)果:

<class 'dict'>
{'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}

數(shù)組對(duì)象

代碼示例:

user_list = json.loads('[1,2,3,4]')
print(type(user_list))
print(user_list)

運(yùn)行結(jié)果:

<class 'list'>
[1, 2, 3, 4]

文件讀取

代碼示例:

with open('out.json', mode='r', encoding='utf-8') as fp:
    user_dic = json.load(fp=fp)
    print(type(user_dic))
    print(user_dic)

文件中存儲(chǔ)的json

{
    "age": 20,
    "children": {
        "age": 1,
        "name": "child1"
    },
    "name": "admin"
}

運(yùn)行結(jié)果:

<class 'dict'>
{'age': 20, 'children': {'age': 1, 'name': 'child1'}, 'name': 'admin'}

python內(nèi)置對(duì)象轉(zhuǎn)json

字典轉(zhuǎn)json

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}})
print(type(json_str))
print(json_str)

 結(jié)果:

<class 'str'>
{"name": "admin", "age": 20, "children": {"name": "child1", "age": 1}}

 字典轉(zhuǎn)json(壓縮存儲(chǔ))

 如果存儲(chǔ)后的數(shù)據(jù)并不用于人工閱讀,可以考慮去除所有地空格和換行。

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, separators=(',', ':'))
print(type(json_str))
print(json_str)

 結(jié)果:

<class 'str'>
{"name":"admin","age":20,"children":{"name":"child1","age":1}}

 字典轉(zhuǎn)json(美化輸出)

適用于對(duì)外展示,提高可讀性;這里的indent=4表示縮進(jìn)空格數(shù)。

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, sort_keys=True, indent=4)
print(type(json_str))
print(json_str)

 結(jié)果:

<class 'str'>
{
    "age": 20,
    "children": {
        "age": 1,
        "name": "child1"
    },
    "name": "admin"
}

 文件讀取

with open('out.json', mode='w+', encoding='utf-8') as fp:
    json.dump(fp=fp, obj={'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, sort_keys=True, indent=4)

自定義對(duì)象

如果是自定義的對(duì)象,需要先將對(duì)象轉(zhuǎn)化為字典類型,再使用json庫(kù)相關(guān)的api。

普通對(duì)象

class Child:
    def __init__(self, name):
        self.name = name
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

單個(gè)對(duì)象

# 序列化對(duì)象
s_str = json.dumps(Student('admin', 18).__dict__)
print(s_str)
 
# 反序列化對(duì)象
student_obj = Student(**json.loads(s_str))
print(student_obj)

 數(shù)組對(duì)象

# 序列化數(shù)組
s_list = [Student('admin1', 1), Student('admin2', 2)]
s_str = json.dumps([obj.__dict__ for obj in s_list])
print(s_str)
 
# 反序列化數(shù)組
student_list = []
for st in json.loads(s_str):
    student_list.append(Student(**st))
print(student_list)

 嵌套對(duì)象

出現(xiàn)嵌套對(duì)象時(shí),思路也是一樣的,都優(yōu)先轉(zhuǎn)化為字典。

class Child:
    def __init__(self, name):
        self.name = name
 
    def __str__(self):
        return "{0}".format(self.name)
 
 
class Student:
    def __init__(self, name, age, children: Child):
        self.name = name
        self.age = age
        self.children = children
 
    def __str__(self):
        return "{0}, {1}, children:{2}".format(self.name, self.age, self.children)

 單個(gè)對(duì)象

# 序列化
s_str = json.dumps(Student('admin', 18, Child('son')), default=lambda o: o.__dict__, indent=4)
print(s_str)
# 反序列化
decode_s = Student(**json.loads(s_str))
print(decode_s)

 對(duì)象數(shù)組

# 序列化
s_list = [Student('admin1', 1, Child('son1')), Student('admin2', 2, Child('son2'))]
s_str = json.dumps([obj.__dict__ for obj in s_list], default=lambda o: o.__dict__, indent=4)
print(s_str)
# 反序列化最外層套了一個(gè)list,其他與單個(gè)對(duì)象一致。

補(bǔ)充知識(shí)點(diǎn)

上述示例中出現(xiàn)的 ** 是一種傳參方式,接收字典類型的數(shù)據(jù)。

def func(**kwargs):
    print(kwargs['a'])
    print(kwargs['b'])
    print(type(kwargs))
 
s_dic = {'a': 1, "b": 2}
func(**s_dic)

 輸出結(jié)果為

1
2
<class 'dict'>

到此這篇關(guān)于Python 中的json常見(jiàn)用法的文章就介紹到這了,更多相關(guān)python json用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法

    解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法

    這篇文章主要介紹了解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python fileinput模塊使用實(shí)例

    Python fileinput模塊使用實(shí)例

    這篇文章主要介紹了Python fileinput模塊使用實(shí)例,本文講解了典型用法、基本格式、默認(rèn)格式、常用函數(shù)和常見(jiàn)例子等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • Python語(yǔ)言實(shí)現(xiàn)科學(xué)計(jì)算器

    Python語(yǔ)言實(shí)現(xiàn)科學(xué)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了Python語(yǔ)言實(shí)現(xiàn)科學(xué)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 人臉識(shí)別實(shí)戰(zhàn)之Opencv+SVM實(shí)現(xiàn)人臉識(shí)別

    人臉識(shí)別實(shí)戰(zhàn)之Opencv+SVM實(shí)現(xiàn)人臉識(shí)別

    這篇文章主要介紹了通過(guò)Opencv+SVM實(shí)現(xiàn)人臉識(shí)別功能,文中的示例代碼介紹詳細(xì),對(duì)于我們學(xué)習(xí)人臉識(shí)別和OpenCV都有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • Python命令行庫(kù)click的具體使用

    Python命令行庫(kù)click的具體使用

    本文主要介紹了Python命令行庫(kù)click的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法

    python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法

    今天小編就為大家分享一篇python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解OpenCV圖像的概念和基本操作

    詳解OpenCV圖像的概念和基本操作

    opencv最主要的的功能是用于圖像處理,所以圖像的概念貫穿了整個(gè)opencv,與其相關(guān)的核心類就是Mat。這篇文章主要介紹了OpenCV圖像的概念和基本操作,需要的朋友可以參考下
    2021-10-10
  • Python編程實(shí)戰(zhàn)之Oracle數(shù)據(jù)庫(kù)操作示例

    Python編程實(shí)戰(zhàn)之Oracle數(shù)據(jù)庫(kù)操作示例

    這篇文章主要介紹了Python編程實(shí)戰(zhàn)之Oracle數(shù)據(jù)庫(kù)操作,結(jié)合具體實(shí)例形式分析了Python的Oracle數(shù)據(jù)庫(kù)模塊cx_Oracle包安裝、Oracle連接及操作技巧,需要的朋友可以參考下
    2017-06-06
  • TensorFlow固化模型的實(shí)現(xiàn)操作

    TensorFlow固化模型的實(shí)現(xiàn)操作

    這篇文章主要介紹了TensorFlow固化模型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理

    Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理

    這篇文章主要介紹了Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理,文中會(huì)詳細(xì)描述怎樣使用openpyxl模塊操作excel及結(jié)合ddt來(lái)實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),有需要的朋友可以參考下
    2021-08-08

最新評(píng)論