最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用python實(shí)現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換

 更新時(shí)間:2022年06月13日 10:29:01   作者:??孤寒者????  
這篇文章主要介紹了利用python實(shí)現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換,通過對將一個(gè)JSON文檔映射為Python對象問題的展開介紹主題內(nèi)容,需要的朋友可以參考一下

前言:

如何將一個(gè)JSON文檔映射為Python對象主要包括一下三個(gè)部分:

  • 考點(diǎn):loads函數(shù)的用法。
  • 面試題:如何將一個(gè)JSON文檔映射為Python對象?
  • 解析

一、將一個(gè)JSON文檔映射為Python對象

第一種方法

供我們讀取的JSON文件是test.json,文件內(nèi)容如下:

{
  "name": "孤寒者",
  "age": 18,
  "height": 130
}

首先,我們可以通過json模塊的loads()方法將JSON文檔轉(zhuǎn)為Python字典類型:

# coding=utf-8
import json

with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()

    product = json.loads(jsonStr)
    print(type(product))
    print(product['name'])

我們在loads()方法里使用對象鉤子即可實(shí)現(xiàn)將一個(gè)JSON文檔映射為Python對象。分析思路:

  • 我們使用對象鉤子實(shí)質(zhì)上總共做了兩步:先通過loads()方法將JSON文檔轉(zhuǎn)換為dict對象,然后將這個(gè)dict對象同時(shí)創(chuàng)建Product對象->將dict對象作為參數(shù)傳入Product對象的構(gòu)造方法__init__()方法中的第二個(gè)參數(shù),即d。而這個(gè)d其實(shí)就是包含了這個(gè)JSON文檔的字典對象,我們又在__init__()方法中將d賦值給了__dict__(就相當(dāng)于你一個(gè)個(gè)寫類里面的屬性名=屬性值),這就會(huì)將字典里的key和value映射為Product對象里的屬性和屬性值。
# coding=utf-8
import json
class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    product = json.loads(jsonStr, object_hook=Product)
    print(type(product))
    # print(product['name'])        # 這樣就不行了~
    print(product.name)

第二種方法

也是使用了對象鉤子,不過與第一種方法不同的是,此時(shí)對象鉤子指定的不再是類,而是指定一個(gè)轉(zhuǎn)換函數(shù),通過這個(gè)函數(shù)返回對象。

# coding=utf-8
import json

class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    def json2Product(d):
        return Product(d)
    product1 = json.loads(jsonStr, object_hook=json2Product)

    print(type(product1))
    print(product1.name)

小結(jié):

json模塊的loads函數(shù)可以裝載JSON文檔,并將其轉(zhuǎn)換為JSON對象。關(guān)鍵需要通過object_hook參數(shù)指定鉤子對象,然后在類的構(gòu)造方法中將傳入的JSON對象賦給內(nèi)部變量__init__。

二、將一個(gè)Python對象轉(zhuǎn)換為對應(yīng)的JSON字符串

包括以下三點(diǎn)考點(diǎn):

  • dumps函數(shù)的用法。
  • 面試題
    • 1.面試題一:將一個(gè)Python對象轉(zhuǎn)換為對應(yīng)的JSON字符串。
    • 2.面試題二:將對象列表轉(zhuǎn)換為JSON數(shù)組。
  • 解析:面試題一 之 將一個(gè)Python對象轉(zhuǎn)換為對應(yīng)的JSON字符串:

使用dumps()函數(shù),關(guān)鍵點(diǎn)是使用轉(zhuǎn)換函數(shù)~

# coding=utf-8
import json
class Product:
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height
product = Product('孤寒者', 18, 130)

def product2Dict(obj):
    return {
        'name': obj.name,
        'age': obj.age,
        'height': obj.height
    }
# dumps()方法的default參數(shù)指定轉(zhuǎn)換函數(shù)。
jsonStr = json.dumps(product, default=product2Dict, ensure_ascii=False)
print(jsonStr)
print(type(jsonStr))

面試題二 之 將對象列表轉(zhuǎn)換為JSON數(shù)組

  • 為了實(shí)現(xiàn)這一功能,我們需要一個(gè)對象列表,所以我們將JSON文檔(如下test.json文件)先轉(zhuǎn)為對象列表(上一題中我們已經(jīng)知道如何操作了~),然后再給它轉(zhuǎn)為JSON數(shù)組。
[
  {
    "name": "孤寒者",
    "age": 18,
    "height": 130
  },
  {
    "name": "小張",
    "age": 18,
    "height": 80
  }
]
# coding=utf-8
import json
class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    products = json.loads(jsonStr, object_hook=Product)
    print(products)

上面截圖可以看出來我們確實(shí)已經(jīng)將JSON文檔轉(zhuǎn)為對象列表了~ 下面開始解題:

# coding=utf-8
import json
class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    products = json.loads(jsonStr, object_hook=Product)
    print(products)
    for product in products:
        print(product.name)
    print("*"*25)
    # 解題部分:
    def product2Dict(obj):
        return {
            'name': obj.name,
            'age': obj.age,
            'height': obj.height
        }
    jsonStr = json.dumps(products, default=product2Dict, ensure_ascii=False)
    print(jsonStr)
    print(type(jsonStr))

總結(jié)

  • json模塊的dumps函數(shù)用于將對象轉(zhuǎn)換為JSON字符串。
  • 通過default參數(shù)指定一個(gè)轉(zhuǎn)換函數(shù),可以在該函數(shù)中提取對象的屬性值,并生成JSON對象,最后dumps負(fù)責(zé)將轉(zhuǎn)換函數(shù)返回的JSON對象轉(zhuǎn)換為JSON字符串。

到此這篇關(guān)于利用python實(shí)現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)JSON映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NCCL深度學(xué)習(xí)Bootstrap網(wǎng)絡(luò)連接建立源碼解析

    NCCL深度學(xué)習(xí)Bootstrap網(wǎng)絡(luò)連接建立源碼解析

    這篇文章主要為大家介紹了NCCL深度學(xué)習(xí)Bootstrap網(wǎng)絡(luò)連接建立源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • python圖像處理之反色實(shí)現(xiàn)方法

    python圖像處理之反色實(shí)現(xiàn)方法

    這篇文章主要介紹了python圖像處理之反色實(shí)現(xiàn)方法,涉及Python結(jié)合OpenCV與numpy操作圖片的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • TOPI如何使TVM代碼不那么樣板化

    TOPI如何使TVM代碼不那么樣板化

    這篇文章主要為大家介紹了TOPI如何使TVM代碼不那么樣板化實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python中的策略模式之解鎖編程的新維度

    Python中的策略模式之解鎖編程的新維度

    策略模式是一種設(shè)計(jì)模式,通過定義一系列算法,將它們封裝起來,并且使它們可以相互替換,從而使算法的變化獨(dú)立于使用算法的客戶,本文給大家介紹Python中的策略模式之解鎖編程的新維度,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Python基礎(chǔ)知識(shí)點(diǎn) 初識(shí)Python.md

    Python基礎(chǔ)知識(shí)點(diǎn) 初識(shí)Python.md

    在本篇文章中我們給大家總結(jié)了關(guān)于Python基礎(chǔ)知識(shí)點(diǎn),通過初識(shí)Python.md的相關(guān)內(nèi)容分享給Python初學(xué)者,一起來看下吧。
    2019-05-05
  • Python在畫圖時(shí)使用特殊符號的方法總結(jié)

    Python在畫圖時(shí)使用特殊符號的方法總結(jié)

    在制作圖表時(shí),如果遇到需要利用特殊符號進(jìn)行表示時(shí)該怎么辦呢?不用慌,這篇文章為大家總結(jié)了python畫圖中使用各種特殊符號的方式,需要的可以參考一下
    2022-04-04
  • 詳解Python中元組的三個(gè)不常用特性

    詳解Python中元組的三個(gè)不常用特性

    元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個(gè)對象保存為相應(yīng)的數(shù)據(jù)容器。本文為大家總結(jié)了元組的三個(gè)不常用特性,感興趣的小伙伴可以了解一下
    2022-07-07
  • python中的format格式化、填充與對齊、數(shù)字格式化方式

    python中的format格式化、填充與對齊、數(shù)字格式化方式

    format函數(shù)是Python中強(qiáng)大的字符串格式化方法,它允許程序員通過大括號{}來為字符串中的插入點(diǎn)占位,并通過傳入?yún)?shù)進(jìn)行替換,{0}、{1}分別代表不同的參數(shù)
    2024-09-09
  • pygame實(shí)現(xiàn)鍵盤和鼠標(biāo)事件的處理

    pygame實(shí)現(xiàn)鍵盤和鼠標(biāo)事件的處理

    這篇文章主要介紹了pygame實(shí)現(xiàn)鍵盤和鼠標(biāo)事件的處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 學(xué)會(huì)迭代器設(shè)計(jì)模式,幫你大幅提升python性能

    學(xué)會(huì)迭代器設(shè)計(jì)模式,幫你大幅提升python性能

    這篇文章主要介紹了python 迭代器設(shè)計(jì)模式的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01

最新評論

潮州市| 定西市| 永新县| 沐川县| 汝州市| 桑植县| 霸州市| 内黄县| 清涧县| 柯坪县| 南丹县| 宁明县| 临桂县| 宜宾市| 贵州省| 巴青县| 元阳县| 沙坪坝区| 广平县| 涿州市| 密山市| 安泽县| 肃宁县| 娄底市| 达拉特旗| 贵州省| 松原市| 马山县| 垣曲县| 长乐市| 花莲市| 郴州市| 凌源市| 龙泉市| 邓州市| 鱼台县| 黄龙县| 鲁甸县| 萨迦县| 汉沽区| 炉霍县|