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

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

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

前言:

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

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

一、將一個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()方法里使用對象鉤子即可實現(xiàn)將一個JSON文檔映射為Python對象。分析思路:

  • 我們使用對象鉤子實質(zhì)上總共做了兩步:先通過loads()方法將JSON文檔轉(zhuǎn)換為dict對象,然后將這個dict對象同時創(chuàng)建Product對象->將dict對象作為參數(shù)傳入Product對象的構(gòu)造方法__init__()方法中的第二個參數(shù),即d。而這個d其實就是包含了這個JSON文檔的字典對象,我們又在__init__()方法中將d賦值給了__dict__(就相當于你一個個寫類里面的屬性名=屬性值),這就會將字典里的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)

第二種方法

也是使用了對象鉤子,不過與第一種方法不同的是,此時對象鉤子指定的不再是類,而是指定一個轉(zhuǎn)換函數(shù),通過這個函數(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__。

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

包括以下三點考點:

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

使用dumps()函數(shù),關(guā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ù)組

  • 為了實現(xiàn)這一功能,我們需要一個對象列表,所以我們將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)

上面截圖可以看出來我們確實已經(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ù)指定一個轉(zhuǎn)換函數(shù),可以在該函數(shù)中提取對象的屬性值,并生成JSON對象,最后dumps負責將轉(zhuǎn)換函數(shù)返回的JSON對象轉(zhuǎn)換為JSON字符串。

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

相關(guān)文章

  • python實現(xiàn)翻譯word表格小程序

    python實現(xiàn)翻譯word表格小程序

    這篇文章主要為大家詳細介紹了python翻譯word表格小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • python用quad、dblquad實現(xiàn)一維二維積分的實例詳解

    python用quad、dblquad實現(xiàn)一維二維積分的實例詳解

    今天小編大家分享一篇python用quad、dblquad實現(xiàn)一維二維積分的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 使用Python實現(xiàn) 學生學籍管理系統(tǒng)

    使用Python實現(xiàn) 學生學籍管理系統(tǒng)

    這篇文章主要介紹了使用Python實現(xiàn) 學生學籍管理系統(tǒng),代碼大致分為五個函數(shù)組成,具體內(nèi)容詳情本文給大家介紹的非常詳細,需要的朋友可以參考下
    2019-11-11
  • 20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    這篇文章主要介紹了20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python編程使用PyQt5庫實現(xiàn)動態(tài)水波進度條示例

    Python編程使用PyQt5庫實現(xiàn)動態(tài)水波進度條示例

    這篇文章主要介紹了Python編程使用PyQt5庫實現(xiàn)動態(tài)水波進度條的示例代碼解析,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-10-10
  • Python中的super()方法使用簡介

    Python中的super()方法使用簡介

    這篇文章主要介紹了Python中的super()方法的使用,是Python入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 關(guān)于你不想知道的所有Python3 unicode特性

    關(guān)于你不想知道的所有Python3 unicode特性

    我的讀者知道我是一個喜歡痛罵Python3 unicode的人。這次也不例外。我將會告訴你用unicode有多痛苦和為什么我不能閉嘴。我花了兩周時間研究Python3,我需要發(fā)泄我的失望。在這些責罵中,仍然有有用的信息,因為它教我們?nèi)绾蝸硖幚鞵ython3。如果沒有被我煩到,就讀一讀吧
    2014-11-11
  • Python網(wǎng)絡(luò)通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例

    Python網(wǎng)絡(luò)通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例

    這篇文章主要介紹了Python網(wǎng)絡(luò)通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例, socket編程一種獨立于協(xié)議的網(wǎng)絡(luò)編程接口,應用程序可以通過它發(fā)送或接收數(shù)據(jù),可對其進行像對文件一樣的打開、讀寫和關(guān)閉等操作,需要的朋友可以參考下
    2023-08-08
  • Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    Python 非極大值抑制(NMS)的四種實現(xiàn)詳解

    本文主要介紹了非極大值抑制(Non-Maximum Suppression,NMS)的四種實現(xiàn)方式,不同方法對NMS速度的影響各不相同,感興趣的小伙伴可以了解一下
    2021-11-11
  • Python 分發(fā)包中添加額外文件的方法

    Python 分發(fā)包中添加額外文件的方法

    這篇文章主要介紹了Python 分發(fā)包中添加額外文件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論