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

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

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

前言:

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

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

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

第一種方法

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

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

首先,我們可以通過(guò)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'])

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

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

第二種方法

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

# 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對(duì)象。關(guān)鍵需要通過(guò)object_hook參數(shù)指定鉤子對(duì)象,然后在類的構(gòu)造方法中將傳入的JSON對(duì)象賦給內(nèi)部變量__init__。

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

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

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

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

  • 為了實(shí)現(xiàn)這一功能,我們需要一個(gè)對(duì)象列表,所以我們將JSON文檔(如下test.json文件)先轉(zhuǎn)為對(duì)象列表(上一題中我們已經(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)

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

# 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ù)用于將對(duì)象轉(zhuǎn)換為JSON字符串。
  • 通過(guò)default參數(shù)指定一個(gè)轉(zhuǎn)換函數(shù),可以在該函數(shù)中提取對(duì)象的屬性值,并生成JSON對(duì)象,最后dumps負(fù)責(zé)將轉(zhuǎn)換函數(shù)返回的JSON對(duì)象轉(zhuǎn)換為JSON字符串。

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

相關(guān)文章

最新評(píng)論