Python giải tuần tự hóa chuỗi thành dict

python-easy-json là một trình giải tuần tự đối tượng JSON sang python đệ quy với sự hỗ trợ để xác định các mô hình dữ liệu và truyền dữ liệu tới python bằng cách sử dụng các chú thích gợi ý kiểu

Lớp JSONObject python-easy-json có thể được sử dụng để

  • khử lưu huỳnh. Chuyển đổi đệ quy chuỗi JSON hoặc từ điển python thành đối tượng python

  • tuần tự hóa. Xuất dữ liệu đối tượng sang chuỗi JSON hoặc từ điển python

  • Nhập gợi ý tích hợp. Chuyển đổi các giá trị JSON thành các loại cụ thể bằng cách tạo mô hình và nhập gợi ý

  • Xác định mô hình dữ liệu. Tạo các mô hình dữ liệu đơn giản nhưng mạnh mẽ để làm việc với dữ liệu từ bất kỳ nguồn nào

  • Tự động hoàn thành IDE. Các IDE có tự động hoàn thành và hỗ trợ gợi ý loại python sẽ tự động hoàn thành các thuộc tính mô hình

Lấy nó ngay

$ pip cài đặt python-dễ-json

Tại sao một thư viện JSON to Object khác?

Sau nhiều năm phát triển python, tôi cảm thấy mệt mỏi khi nhận dữ liệu từ API, cơ sở dữ liệu, tệp csv, v.v. và làm việc với chúng dưới dạng từ điển python. Các tùy chọn thư viện JSON deserializer đơn giản mà tôi thấy thực sự không phù hợp với việc tôi cảm thấy việc deserializing thành một đối tượng JSON dễ dàng như thế nào. Ngoài ra, tôi muốn tạo các lớp mô hình dữ liệu đơn giản và sử dụng python “Type Hinting” để xác định các loại giá trị thuộc tính

Ví dụ đơn giản

Chỉ cần chuyển một chuỗi JSON hoặc đối số dict python tới hàm tạo JSONObject. Trong ví dụ này, chúng ta có thể chuyển từ sử dụng tra cứu khóa dict sang một mảng JSONObject

for row in results:
    if row['the_key'][0]['another_key'] == 'the_value':
        ...

Với JSONObject, điều này có thể được viết lại như bên dưới, sử dụng khả năng hiểu danh sách. Điều này làm cho mã dễ đọc hơn và ít lộn xộn hơn khi làm việc với các cấu trúc từ điển phức tạp trong mã

from python_easy_json import JSONObject

for row in [JSONObject(r) for r in results]:
    if row.the_key[0].another_key == 'the_value':
        ...

Dữ liệu từ Chuỗi JSON

from python_easy_json import JSONObject

# JSON string
obj = JSONObject('{"test_key": "test_value"}')
print(obj.to_json())

{"test_key": "test_value"}

Dữ liệu từ một từ điển python

# Python dictionary
obj = JSONObject({'test_key': 'test_value'})
print(obj.to_json())

{"test_key": "test_value"}

Mô hình dữ liệu cho mọi thứ

Sử dụng lớp JSONObject python-easy-json, bạn có thể tạo các mô hình dữ liệu, bao gồm các mô hình và mảng được lồng sâu, từ bất kỳ chuỗi hoặc từ điển JSON nào. Ngoài ra, "Gợi ý loại" của python có thể được sử dụng để truyền giá trị cho loại được xác định bởi chú thích gợi ý loại

Như một phần thưởng;

Ví dụ này cho thấy cách xác định các mô hình dữ liệu lồng nhau/con, bao gồm danh sách các mô hình dữ liệu lồng nhau

# Represents json from 'tests/test_data/nested_data_1.json'
class CakeToppingTypeModel(JSONObject):
    id: int = None
    type: str = None

class CakeBatterTypeModel(JSONObject):
    id: int = None
    type: str = None

class CakeBatterModel(JSONObject):
    batter: List[CakeBatterTypeModel] = None

class CakeModel(JSONObject):
    id: str = None
    type: str = None
    name: str = None
    ppu: float = None
    batters: CakeBatterModel = None
    topping: List[CakeToppingTypeModel]

cake = CakeModel(data)
print(f'Cake: {cake.name} ({len(cake.batters.batter)} ingredents).')

Cake: Devil's Food Cake (4 ingredients).

Nhập gợi ý Tự động chuyển đổi giá trị JSON

Nếu một mô hình đã được xác định và các thuộc tính có chú thích Gợi ý kiểu python, thì JSONObject có thể chuyển đổi giá trị thành các loại chú thích

from datetime import datetime

class TimestampModel(JSONObject):
    id: int = None
    timestamp: datetime = None

data = {'id': "123", "timestamp": "2022-09-19 10:11:01.123456"}
obj = TimestampModel(data, cast_types=True)

if obj.id > 0:
    print(f"ID: {obj.id}: {obj.timestamp.strftime('%b %d, %Y @ %H:%M:%S %p')}")

$ ID: 123: Sep 19, 2022 @ 10:11:01 AM

Tài liệu

Lớp đối tượng JSON

JSONObject.__init__(data: Union[Dict, str, None] = None, cast_types: bool = False, ordered: bool = False)
    Load the dictionary or JSON string data argument into ourselves as properties.
    :param data: Dictionary or valid JSON string.
    :param cast_types: If properties of this class are type annotated, try to cast them.
    :param ordered: Use OrderedDict() if set, otherwise use dict(). For python <= 3.6.

JSONObject.to_json(indent: int = None)
    Export stored data as a json string.
    :param indent: Positive integer value for formatting JSON string indenting.
    :returns: JSON string

JSONObject.to_dict(recursive: bool = True, dates_to_str: bool = False)
    Export stored data as a python dictionary object.
    :param recursive: Boolean, recursively convert nested JSONObjects to a dict
    :param dates_to_str: Boolean, convert all date or datetime values to string.
    :returns: dictionary object

Giấy phép

MIT cấp phép. Xem tệp GIẤY PHÉP đi kèm để biết thêm chi tiết

Dữ liệu đơn vị

Kiểm tra dữ liệu JSON cho các ví dụ và unittests có nguồn gốc từ. https. //mã nguồn mở. adobe. com/Spry/samples/data_region/JSONDataSetSample. html

Làm cách nào để phân tích cú pháp chuỗi thành dict trong Python?

eval() là một chức năng thư viện python sẵn có được sử dụng để chuyển đổi chuỗi thành từ điển một cách hiệu quả. Đối với phương pháp này, bạn phải nhập gói ast từ thư viện python rồi sử dụng gói đó với phương thức literal_eval() .

Làm cách nào để giải tuần tự hóa từ điển trong Python?

Để deserialize chuỗi nhị phân được tạo bởi pickle. dumps() và tạo một đối tượng từ điển mới từ nó, sử dụng pickle. hàm loads() và chuyển biểu diễn chuỗi nhị phân được tuần tự hóa vào đó . Đầu ra là một đối tượng từ điển mới khác với từ điển chưa được xác thực ban đầu.

Làm cách nào để chuyển đổi chuỗi JSON thành dict trong Python?

Nếu bạn có một chuỗi JSON, bạn có thể phân tích cú pháp chuỗi đó bằng cách sử dụng json. phương thức loading() . Kết quả sẽ là một từ điển Python.

Làm cách nào để biến chuỗi thành từ điển?

Để chuyển đổi một chuỗi thành từ điển, chúng ta phải đảm bảo rằng chuỗi chứa một biểu diễn hợp lệ của từ điển. Điều này có thể được thực hiện bởi hàm eval() . Mô-đun Cây cú pháp trừu tượng (ast) của Python có phương thức literal_eval() đánh giá cấu trúc chữ Python hợp lệ một cách an toàn.