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 AMTà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 objectGiấ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