Python JSON để phản đối

Đây là bài viết tiếp theo về Cách tuần tự hóa một đối tượng lớp thành JSON trong Python để đóng vòng lặp về các vấn đề tuần tự hóa và giải tuần tự hóa trong Python. Tuần tự hóa đang biến một đối tượng thành các chuỗi hoặc tệp và để lấy lại các đối tượng ban đầu từ các chuỗi đã lưu là giải tuần tự hóa. Nếu bạn hiểu cách tuần tự hóa được thực hiện, bạn có thể đảo ngược quá trình giải tuần tự hóa khá nhiều. Tuy nhiên, như thường lệ, ma quỷ nằm trong chi tiết. Trước tiên hãy bắt đầu với định nghĩa của một lớp tùy chỉnh

1. Định nghĩa lớp tùy chỉnh

Để khớp hình minh họa với bài viết trước, trước tiên hãy sử dụng cùng một lớp Nhãn đơn giản

class Label:
def __init__[self, label, x, y, width, height]:
self.label = label
self.x = x
self.y = y
self.width = width
self.height = height

Chuỗi được tuần tự hóa bằng cách sử dụng json. bãi [] là

{"label": "person", "x": 10, "y": 10, "width": 4, "height": 10}
2. json. tải [] với object_hook

Phương thức deserialization mặc định là json. loading[] lấy một chuỗi làm đầu vào và xuất ra một đối tượng từ điển JSON. Để chuyển đổi đối tượng từ điển thành đối tượng lớp tùy chỉnh, bạn cần viết phương thức giải tuần tự hóa. Cách dễ nhất là thêm một phương thức tĩnh vào chính lớp đó. Toàn bộ lớp với các phương thức serialize [to_json] và deserialize [from_json] sẽ trông như thế này

Được trang bị phương pháp khử lưu huỳnh, chúng ta có thể gọi json. loading và chỉ định phương thức deserialization mới của lớp Label là object_hook

Phương thức loading[], thay vì trả về một đối tượng từ điển JSON, sẽ trả về một đối tượng Nhãn thích hợp như mong đợi

3. đối tượng lồng nhau

Càng xa càng tốt. Bây giờ hãy xem bạn cần làm gì đối với các trường hợp phức tạp hơn khi bạn có các đối tượng lồng nhau. Lớp ImageLabelCollection chứa danh sách các đối tượng Nhãn như một phần của biến lớp 'bboxes'. Định nghĩa của lớp được sao chép bên dưới với phương thức tuần tự hóa to_json[]

Một mẫu của chuỗi json kết quả là

Đối tượng ImageLabelCollection được tuần tự hóa

Để giải tuần tự hóa chuỗi thành một đối tượng lớp, bạn cần viết một phương thức tùy chỉnh để xây dựng đối tượng. Bạn có thể thêm một phương thức tĩnh vào ImageLabelCollection bên trong đó bạn xây dựng các đối tượng Nhãn từ từ điển JSON đã tải và sau đó gán chúng dưới dạng danh sách cho biến lớp bbox

Quá trình này hơi tẻ nhạt nhưng có một cách tốt hơn. Bạn có thể viết phương thức tĩnh from_json[] trong đó bạn xử lý việc xây dựng đối tượng lớp tăng dần

Khi json. loading[] được gọi với phương thức from_json[] ở trên làm hook đối tượng, nó sẽ gọi phương thức này lặp đi lặp lại khi nó xây dựng đối tượng từ dưới lên

Điều hấp dẫn là phương thức này được gọi nhiều lần và mỗi lần, một phần khác của đối tượng từ điển được gọi, do đó bạn phải thêm logic xử lý cách biến các đối tượng từ điển thành các đối tượng lớp phù hợp tùy thuộc vào loại. Trong trường hợp trên, tôi đã sử dụng sự hiện diện của một số khóa nhất định làm gợi ý để quyết định hàm tạo nào sẽ được gọi. Vẫn còn một chút tẻ nhạt, nhưng tốt hơn giải pháp ban đầu là tự viết toàn bộ mã

4. jsonpickle

Phương pháp giải tuần tự hóa cuối cùng là sử dụng một thư viện bên ngoài có tên là jsonpickle. Bạn có thể dễ dàng cài đặt nó bằng cách

pip install jsonpickle

Cách sử dụng khá đơn giản. Bạn gọi jsonpickle. encode[] để tuần tự hóa và giải mã[] để giải tuần tự hóa

Kết quả tuần tự hóa hơi khác so với chuỗi JSON ban đầu của chúng tôi

{"py/object": "__main__.ImageLabelCollection", "version": 1, "type": "bounding-box-labels", "bboxes": {"20210715_111300 16.jpg": [{"py/object": "__main__.Label", "label": "StabilityOff", "x": 1, "y": 1025, "width": 553, "height": 29}, {"py/object": "__main__.Label", "label": "StabilityOn", "x": 1, "y": 964, "width": 563, "height": 30}]}}

Nó đã thêm một số thông tin chú thích bổ sung để giải tuần tự hóa sau

Phần kết luận

Với tính đơn giản của jsonpickle, có vẻ như đối với các mục đích chung, đây sẽ là phương pháp dễ dàng nhất để tuần tự hóa. Tuy nhiên, hạn chế là do thuộc tính bổ sung của jsonpickle trong chuỗi JSON, bạn cần sử dụng phương thức giải mã [] của jsonpickle để đưa các đối tượng trở lại. Nói chung, đây không phải là vấn đề, nhưng nếu bạn có một số đối tượng tùy chỉnh mà bạn cần tự xử lý, bạn có thể sử dụng phương pháp khử lưu huỳnh tùy chỉnh được đề xuất. Toàn bộ code mẫu được chia sẻ tại đây. Cảm ơn vì đã đọc

Nếu bạn chuẩn bị đọc bài viết này, có lẽ bạn đã gặp một tình huống cần lưu trữ dữ liệu của mình ở định dạng có cấu trúc để có thể dễ dàng vận chuyển giữa các ứng dụng web và máy chủ

JSON là viết tắt của Java Script Object Notation như đã nói ở trên là một định dạng dữ liệu thực sự rất nhẹ và khá giống với các đối tượng Từ điển Python. Chúng thực sự rất hữu ích vì các ứng dụng web và API có thể dễ dàng phân tích cú pháp thông qua chúng và nhanh chóng truyền dữ liệu giữa các ứng dụng và dịch vụ. Trong bài viết này, chúng tôi sẽ sử dụng gói python “json” để chuyển đổi đối tượng python thành đối tượng JSON.  

Trước khi đi sâu vào blog, hãy làm rõ những điều cơ bản về python;

Cú pháp của đối tượng JSON

JSON objects are often stored with keys and values format which is similar to the dictionary. 



{

 "key1" : "value1",

 "key2" : "value2",

 .

 .

 .

 }

Gói cài đặt

Điều đầu tiên chúng ta cần làm là cài đặt gói “json” trong python. Gói “json” cho phép chúng ta chuyển đối tượng python thành đối tượng JSON. Sau đây là cú pháp cài đặt gói “json” trong môi trường python

#Importing JSON Package in Python

import json

Xin lưu ý rằng phương pháp chuyển đổi các đối tượng python thành JSON được gọi là tuần tự hóa. Đó là bởi vì khi chúng ta chuyển đổi một đối tượng python thành JSON [và ngược lại], đó là một quá trình lưu trữ dữ liệu thành một chuỗi byte

Có bốn phương thức khác nhau trong mô-đun python json để hoạt động hoàn toàn với các đối tượng python và JSON. Bốn cái đó được đề cập như dưới đây

  1. json. dumps[] - Phương thức này cho phép bạn chuyển đổi đối tượng python thành đối tượng JSON được tuần tự hóa
  2. json. dump[] - Phương thức này cho phép bạn chuyển đổi một đối tượng python thành JSON và ngoài ra cho phép bạn lưu trữ thông tin vào một tệp [tệp văn bản]
  3. json. loading[] - Giải tuần tự hóa một đối tượng JSON thành một đối tượng python tiêu chuẩn
  4. json. load[] - Giải tuần tự hóa một đối tượng tệp JSON thành một đối tượng python tiêu chuẩn

Khi máy tính của bạn đang xử lý nhiều thông tin thuộc nhiều loại dữ liệu khác nhau, nó cần một kết xuất dữ liệu để xử lý thông tin đó. Do đó, chúng ta có các phương thức dump[] và dump[] trong python.  

[Cũng đọc. Kiểu dữ liệu trong Python]

Sau đây là bảng chuyển đổi đối tượng python thành đối tượng JSON tương đương. Nó khá thẳng về phía trước, nhưng cần phải được hiển thị

Đối tượng Python

Đối tượng JSON tương đương

Chuỗi [str]

chuỗi

Số nguyên [int]

Số - int

Số dấu phẩy động [float]

Số - thực

Boolean Đúng [True]

ĐÚNG VẬY

Boolean Sai [Sai]

sai

danh sách

mảng

tuple

mảng

từ điển

mục tiêu

Không có

Vô giá trị

Bây giờ, chúng ta sẽ chuyển sang một số ví dụ trong đó chúng ta sử dụng các phương thức được đề cập ở trên để chuyển đổi một đối tượng python thành một đối tượng JSON tương đương và ngược lại

[Phải bắt. Python để đại diện cho đầu ra]

ví dụ 1. JSON. bãi []

json. Phương thức dumps[] cho phép chúng ta chuyển đổi một đối tượng python thành một đối tượng chuỗi JSON tương đương. Điều này thực sự hữu ích khi cung cấp thông tin cho các API cần được phân tích cú pháp hoặc in. Xem một ví dụ dưới đây

#Importing JSON Package in Python

import json

#creatig a dictionary which can be converted into JSON string

my_details = {

    "Name" : "Lalit Salunkhe",

    "Age" : 28,

    "Job" : True,

    "Married" : False,

    "Bikes" : [

        {"Model1": "Jupiter 120", "price": 62000},

        {"Model2": "Yamaha YZF-R15", "price": 150000}

        ]

    }

print[json.dumps[my_details]]

Ở đây, chúng tôi đã tạo một từ điển python và sử dụng json. dumps[] để chuyển đổi nó thành một đối tượng chuỗi JSON

Xem đầu ra như hình dưới đây

Đầu ra của chuyển đổi python sang JSON

Chúng ta cũng có thể sử dụng các chức năng khác để sửa đổi mã sao cho nó có thể được sắp xếp tăng dần và thụt vào

#Sorting the results into ascending order and indenting

print[json.dumps[my_details, indent = 3, sort_keys= True]]

Xem ngay đầu ra được cập nhật như hình bên dưới

Đối tượng Python theo thứ tự JSON và có thụt đầu dòng

Tại đây, bạn có thể thấy cách đầu ra được sắp xếp theo thứ tự tăng dần trong đó khóa “Tuổi” và giá trị tương đương xuất hiện trước thay vì khóa “Tên” và giá trị được liên kết với nó. Điều này là do chúng tôi đã sử dụng đối số sort_keys = True cho phép chúng tôi sắp xếp kết quả theo thứ tự tăng dần. Ngoài ra, bạn cũng có thể thấy đầu ra hiện được thụt vào mỗi dòng như thế nào vì chúng ta đã sử dụng đối số indent = 3 trong mã

Ngoài ra, ngoài tất cả những điều này, làm cách nào chúng tôi có thể đảm bảo rằng việc chuyển đổi [đối tượng python thành chuỗi JSON] đã thực sự xảy ra? . Xem đoạn mã dưới đây để nhận thức rõ hơn

________số 8

Bây giờ, nếu bạn thấy đầu ra, nó sẽ giống như hình bên dưới

Kiểm tra lớp của đối tượng JSON

Bạn có thể dễ dàng thấy rằng toàn bộ đối tượng my_details vốn là từ điển python trước đây giờ đã được chuyển đổi thành đối tượng JSON với kiểu class string.  

[Đọc thêm. Word nhúng trong NLP bằng Python]

ví dụ 2. JSON. bãi rác[]

Ngoài json. bãi [], json. Phương thức dump[] cho phép chúng ta chuyển đổi đối tượng python đã cho thành một đối tượng JSON tương đương và sau đó lưu kết quả vào một tệp văn bản. Chúng ta sẽ sử dụng cùng một ví dụ như trên cho ví dụ này

import json

my_details = {

    "Name" : "Lalit Salunkhe",

    "Age" : 28,

    "Job" : True,

    "Married" : False,

    "Bikes" : [

        {"Model1": "Jupiter 120", "price": 62000},

        {"Model2": "Yamaha YZF-R15", "price": 150000}

        ]

    }

#Using file I/O operation to create a new json file into working directory

with open["Data_File.json", "w"] as file: 

#Using json.dump[] to write the data into a JSON file.    

    json.dump[my_details, file]

Ở đây, chúng ta đã sử dụng thao tác nhập xuất tệp để tạo một tệp JSON mới với tên “Data_File. json”. File này sẽ dùng để lưu trữ một từ điển python có tên my_details dưới dạng một chuỗi JSON, khi chúng ta nhấn vào json. phương thức đổ [].  

Ngoài ra, không có gì chúng tôi có thể hiển thị cho bạn dưới dạng đầu ra trong bảng điều khiển python. Tuy nhiên, trên thư mục làm việc của python, bạn có thể thấy một tệp json có tên Data_File. Xem ảnh chụp màn hình bên dưới

Data_File được tạo trên thư mục python đang hoạt động

Nếu bạn mở tệp JSON vào bất kỳ trình soạn thảo văn bản nào, bạn sẽ thấy một chuỗi JSON có dữ liệu tương đương với my_details bên dưới nó như hình bên dưới

Đầu ra của Data_File trông như thế này

[Blog được đề xuất. Python Essentials để điều khiển bằng giọng nói. Phần 1]

Giải mã dữ liệu JSON thành đối tượng Python

Để chuyển đổi [giải mã] các chuỗi JSON thành các đối tượng python tương đương, chúng ta có json. tải [] và jso. load[], mà chúng tôi đã mô tả trước đó ở phần đầu của bài viết này. Giải mã nhìn như dưới đây

Đối tượng JSON

Đối tượng Python tương đương

Vô giá trị

Không có

Mục tiêu

Từ điển

mảng

danh sách

Boolean sai [Sai]

Sai

Boolean đúng [True]

Thật

Số - int

int

Số - thực

Trôi nổi

chuỗi

Chuỗi [str]

Bây giờ chúng tôi sẽ hướng tới các ví dụ sẽ giúp chúng tôi giải mã dữ liệu JSON thành các đối tượng python tương đương

ví dụ 3. JSON. tải []

json. loading[] cho phép bạn chuyển đổi một chuỗi JSON thành một đối tượng python tương đương [Cụ thể là từ điển python]. Xem mã dưới đây

{"label": "person", "x": 10, "y": 10, "width": 4, "height": 10}
0

Ở đây, chúng ta có một đối tượng json có tên my_details_json. Chúng ta có thể sử dụng hàm type[] để kiểm tra xem nó có thực sự là một chuỗi json hay không. Sau đó, chúng tôi đã sử dụng json. loading[] để giải mã đối tượng json thành một từ điển python tương đương và kiểm tra cả kiểu của nó [nó phải là dict]. Xem đầu ra như hình dưới đây

Chuyển đổi chuỗi JSON thành Từ điển Python tương đương

Ví dụ 4. JSON. trọng tải[]

Bây giờ, chúng ta sẽ xem một ví dụ nơi chúng ta sử dụng json. load[] để chuyển đổi/giải mã tệp JSON thành đối tượng python [từ điển]. Hãy nhớ rằng, trong ví dụ 2, chúng tôi đã tạo một tệp JSON có tên là Data_File. json. Chúng tôi sẽ sử dụng cùng một tệp làm nguồn vào ví dụ này và áp dụng json. load[] để giải mã nó thành từ điển python. Xem ví dụ bên dưới

{"label": "person", "x": 10, "y": 10, "width": 4, "height": 10}
1

Ở đây, chúng tôi đang sử dụng chức năng mở I/O tích hợp sẵn của python để đọc tên tệp json Data_File và sau đó sử dụng json. load[] để chuyển đổi dữ liệu từ tệp đó thành một đối tượng python có liên quan [i. e. một cuốn từ điển]. Xem đầu ra bên dưới

Chuyển đổi dữ liệu từ đối tượng tệp json thành đối tượng python bằng json. phương thức tải []

Vâng, chúng tôi sẽ kết thúc bài viết này tại đây với các điểm tóm tắt sau

[Blog được đề xuất. Làm cách nào để chúng tôi triển khai món súp đẹp mắt để quét web?]

Tóm lược

  • json. Phương thức dumps[] cho phép chúng ta chuyển đổi một đối tượng python thành một đối tượng JSON tương đương. Hay nói cách khác là gửi dữ liệu từ python sang json

  • json. Phương thức dump[] cho phép chúng ta chuyển đổi một đối tượng python thành một đối tượng JSON tương đương và lưu kết quả vào tệp JSON tại thư mục làm việc

[Phải đọc. 20 câu hỏi phỏng vấn Python]

  • json. phương thức loading[] cho phép chúng ta chuyển đổi một chuỗi JSON thành một đối tượng python tương đương [từ điển]. Nói cách khác, nó giúp chúng ta nhận dữ liệu từ json về python

  • json. phương thức load[] cho phép chúng ta đọc tệp dữ liệu JSON và sau đó chuyển đổi dữ liệu thành một đối tượng dữ liệu python tương đương

    Làm cách nào để chuyển đổi JSON thành một đối tượng trong Python?

    Tạo Đối tượng mới và chuyển từ điển kết quả dưới dạng bản đồ để chuyển đổi dữ liệu JSON thành Đối tượng Python tùy chỉnh. Như chúng ta đã biết json. tải [] và json. phương thức load[] trả về một đối tượng dict.

    Làm cách nào để giải tuần tự hóa JSON thành đối tượng Python?

    Để giải tuần tự hóa chuỗi thành một đối tượng lớp, bạn cần phải viết một phương thức tùy chỉnh để xây dựng đối tượng . Bạn có thể thêm một phương thức tĩnh vào ImageLabelCollection bên trong đó bạn xây dựng các đối tượng Nhãn từ từ điển JSON đã tải và sau đó gán chúng dưới dạng danh sách cho biến lớp bbox.

    Làm cách nào để lấy dữ liệu từ đối tượng JSON Python?

    Thay vì phương thức tải JSON đọc chuỗi JSON, phương thức được sử dụng để đọc dữ liệu JSON trong tệp là load[] . Phương thức load[] chiếm một đối tượng tệp và trả về dữ liệu JSON được phân tích thành một đối tượng Python. Để lấy đối tượng tệp từ đường dẫn tệp, có thể sử dụng hàm open[] của Python.

    Làm cách nào để tạo đối tượng JSON tùy chỉnh trong Python?

    Trong Python, bạn có thể tạo chuỗi JSON bằng cách đơn giản gán một chuỗi ký tự JSON hợp lệ cho một biến hoặc chuyển đổi Đối tượng Python thành JSON . chức năng tải [].

Chủ Đề