Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kaedah untuk menukar antara kamus dan JSON dalam Python?

Apakah kaedah untuk menukar antara kamus dan JSON dalam Python?

WBOY
WBOYasal
2023-10-18 10:30:111688semak imbas

Apakah kaedah untuk menukar antara kamus dan JSON dalam Python?

Apakah kaedah penukaran bersama antara kamus dan JSON dalam Python?

Sebagai struktur data yang sangat biasa digunakan, kamus digunakan secara meluas dalam Python. JSON (JavaScript Object Notation), sebagai format pertukaran data yang ringan, juga digunakan secara meluas dalam penghantaran dan penyimpanan data rangkaian. Dalam Python, menukar antara kamus dan JSON ialah operasi biasa. Artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan dan melampirkan contoh kod yang sepadan.

Kaedah 1: Gunakan fungsi dumps() dan fungsi loads() modul json

Modul json ialah modul dalam perpustakaan standard Python untuk memproses data JSON. Antaranya, fungsi dumps() digunakan untuk menukar objek Python kepada rentetan JSON, dan fungsi loads() digunakan untuk menukar rentetan JSON kepada objek Python.

Berikut ialah contoh untuk menukar kamus kepada rentetan JSON dan rentetan JSON kembali ke kamus:

import json

# 将字典转换为JSON字符串
my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
json_str = json.dumps(my_dict)

print(json_str)  # 输出:{"name": "Tom", "age": 20, "gender": "male"}

# 将JSON字符串转换为字典
new_dict = json.loads(json_str)

print(new_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

Kaedah 2: Gunakan fungsi dump() dan fungsi load() modul json

Sebagai tambahan kepada di atas fungsi dumps() dan fungsi loads(), modul json juga menyediakan fungsi dump() dan fungsi load(), yang digunakan untuk menulis objek Python terus ke fail atau membaca data JSON daripada fail.

Berikut ialah contoh untuk menulis kamus pada fail JSON dan membaca kamus daripada fail JSON:

import json

# 将字典写入JSON文件
my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
with open('data.json', 'w') as f:
    json.dump(my_dict, f)

# 从JSON文件中读取字典
with open('data.json', 'r') as f:
    new_dict = json.load(f)

print(new_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

Kaedah ketiga: Gunakan subkelas kelas json.JSONEncoder dan json.JSONDecoder dalam modul json

Selain itu kepada perkara di atas Selain kaedah fungsi, kami juga boleh melaksanakan penukaran antara kamus dan JSON dengan menyesuaikan subkelas kelas json.JSONEncoder dan json.JSONDecoder. Dengan mewarisi dua kelas ini dan mengatasi kaedah yang berkaitan, kami boleh menyesuaikan tingkah laku penukaran kamus.

Berikut ialah contoh menyesuaikan subkelas kelas JSONEncoder dan JSONDecoder untuk menukar kamus dan JSON:

import json

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, dict):
            return json.JSONEncoder.default(self, obj)
        return obj.__dict__

class MyDecoder(json.JSONDecoder):
    def __init__(self):
        json.JSONDecoder.__init__(self, object_hook=self.dict_to_object)

    def dict_to_object(self, d):
        if '__class__' in d:
            class_name = d.pop('__class__')
            module_name = d.pop('__module__')
            module = __import__(module_name)
            class_ = getattr(module, class_name)
            args = dict((key, value) for key, value in d.items())
            instance = class_(**args)
        else:
            instance = d
        return instance

# 将字典转换为JSON字符串
my_dict = {'name': 'Tom', 'age': 20, 'gender': 'male'}
json_str = json.dumps(my_dict, cls=MyEncoder)

print(json_str)  # 输出:{"name": "Tom", "age": 20, "gender": "male"}

# 将JSON字符串转换为字典
new_dict = json.loads(json_str, cls=MyDecoder)

print(new_dict)  # 输出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

Di atas ialah beberapa kaedah yang biasa digunakan untuk menukar kamus Python dan JSON. Mengikut keperluan sebenar, pilih kaedah yang sesuai untuk digunakan, yang boleh mengendalikan penukaran data antara kamus dan JSON dengan mudah.

Atas ialah kandungan terperinci Apakah kaedah untuk menukar antara kamus dan JSON dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn