例えば dict[int, int]
を JSON で記述しようとすると,キーは文字列にする必要がありますが,Pydantic がうまく型変換してくれるので気にせず使えて便利です.
% python --version Python 3.11.6 % pip freeze pydantic==2.5.2
test_pydantic.py
import json import unittest from pydantic import BaseModel class A(BaseModel): str_dict: dict[str, int] int_dict: dict[int, int] class ATest(unittest.TestCase): def test_load_json(self): with self.assertRaises(json.JSONDecodeError): json.loads("{1:1}") def test_dict_equal(self): self.assertEqual({1: 1}, {1: 1}) self.assertNotEqual({1: 1}, {"1": 1}) def test_a(self): a = A(**json.loads('{"str_dict":{"1":1},"int_dict":{"1":"1"}}')) self.assertEqual(a.str_dict, {"1": 1}) self.assertEqual(a.int_dict, {1: 1}) # <- 型変換
test_load_json
関数では,int 型のキーを持つ object は不正な JSON 形式であることを確認しています.
test_dict_equal
関数では,念のため,Python の比較について動作確認しています.
test_a
関数では,JSON形式で {"1":"1"}
が,Python で {1: 1}
に型変換されていることを確認しています.
% python -m unittest tests.test_pydantic .. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
Pydantic は柔軟に使えるよう設計されており,気に入りました.