[英]Check if JSON string is valid Pydantic schema
我想檢查 JSON 字符串是否是有效的 Pydantic 模式。
from pydantic import BaseModel
class MySchema(BaseModel):
val: int
我可以通過 try/except 非常簡單地做到這一點:
import json
valid = '{"val": 1}'
invalid = '{"val": "horse"}'
def check_valid(item):
try:
MySchema(**json.loads(item))
return True
except:
return False
print(check_valid(valid))
print(check_valid(invalid))
Output:
True
False
使用 try/except 來獲得真/假似乎是不好的做法。 有沒有更好的辦法?
我認為這是一個很好的方法,我只建議將 JSON 解析與 model 實例化分開處理,並且在捕獲異常時更具體,見下文:
import pydantic
import json
class MySchema(pydantic.BaseModel):
val: int
invalid_json = '{"invalid": 123'
invalid_value = '{"val": "horse"}'
invalid_key = '{"wrong_key": 1}'
valid = '{"val": 1}'
valid_2 = '{"val": "1"}'
def check_valid(item):
try:
json_item = json.loads(item)
# Catch potential JSON formatting problems:
except json.JSONDecodeError as exc:
print(f"ERROR: Invalid JSON: {exc.msg}, line {exc.lineno}, column {exc.colno}")
return False
try:
MySchema(**json_item)
# Catch pydantic's validation errors:
except pydantic.ValidationError as exc:
print(f"ERROR: Invalid schema: {exc}")
return False
return True
print(check_valid(invalid_json))
# ERROR: Invalid JSON: Expecting ',' delimiter, line 1, column 16
# False
print(check_valid(invalid_value))
# ERROR: Invalid schema: 1 validation error for MySchema
# val
# value is not a valid integer (type=type_error.integer)
# False
print(check_valid(invalid_key))
# ERROR: Invalid schema: 1 validation error for MySchema
# val
# field required (type=value_error.missing)
# False
print(check_valid(valid))
# True
print(check_valid(valid_2))
# True
當然,您可以將邏輯拆分為兩個函數,一個負責 JSON 驗證,另一個負責pydantic
model。
import pydantic
class MySchema(pydantic.BaseModel):
val: int
MySchema.parse_raw('{"val": 1}')
MySchema.parse_raw('{"val": "horse"}')
我認為這將是最簡單的解決方案:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.