JSONLINT:python 의 json 데이터 검증 라 이브 러 리 인 스 턴 스 분석
JSON 함수
JSON 함 수 를 사용 하려 면 json 라 이브 러 리 를 가 져 와 야 합 니 다:import json.
함수.
묘사 하 다.
json.dumps
Python 대상 을 JSON 문자열 로 인 코딩
json.loads
인 코딩 된 JSON 문자열 을 Python 대상 으로 디 코딩 합 니 다.
앞 뒤 분리 와 REST API 가 뜨 거 워 지면 서 개발 자 들 은 제 이 슨 데 이 터 를 유연 하고 우아 하 게 검증 할 수 있 는 방법 을 찾 고 있다.직접 수 동 으로 데이터 검증 을 받 는 사람 도 있 고 json scheme 로 검증 한 사람 도 있 습 니 다.전 자 는 함 수 를 지루 하 게 만 들 기 쉬 우 며 중복 되 는 검증 도 적지 않 을 수 있다.후자 의 검증 도 원활 하지 않다.
본 고 에서 소개 한 jsonlint 는 python 의 폼 검증 도구 인 wtforms 를 계발 했다.wtforms 는 Form 류 를 계승 하여 json 데이터 검증 을 할 수 있 지만 wtforms 는 json 의 배열(Array)유형 처리 에 대해 매우 기괴 한 행 위 를 하 므 로 a-1,a-2 를 통 해 배열 의 수 거 를 전달 해 야 하기 때문에 배열 의 데 이 터 를 효과적으로 처리 하지 못 하 는 경우 가 많다.jsonlint 대부분의 코드 는 wtforms 로 wtforms 의 한 가지 로 볼 수 있 습 니 다.그러나 jsonlint 는 wtforms 의 폼 렌 더 링 부분 을 삭제 하고 들 어 오 는 데이터 형식 을 바 꾸 었 습 니 다.가장 중요 한 것 은 정확 한 논리 검증 배열(Array)과 대상(Object)형식 을 사용 하 는 것 입 니 다.다음은 몇 가지 예 이다.
기본 문자열 형식 json 인증
기본 문자열 형식 에 대해 서 는 JSon 의 하위 클래스 를 만 들 고 해당 하 는 Field 를 작성 하면 됩 니 다.사용 방식 과 wtforms 형식:
from jsonlint import Json
from jsonlint.fields import StringField
from jsonlint.validators import DataRequired
class MyLint(Json):
name = StringField(validators=[DataRequired()])
mylint = MyLint({'name': 'demo'})
print mylint.validate() # True
print mylint.name.data # demo
더욱 유연 한 검증 json 데이터jsonlint 는 wtforms 의 장점 을 계승 하여 더욱 유연 한 사용자 정의 json 데이터 검증 을 할 수 있 습 니 다.field 류 의 인 스 턴 스 이름 을 함수 vaidate 로 쓰기 만 하면 됩 니 다.fieldname,사용자 정의 인증 변경 필드:
from jsonlint import Json
from jsonlint.fields import IntegerField
from jsonlint.validators import ValidationError
class AgeLint(Json):
age = IntegerField()
def validate_age(form, field):
if field.data < 13:
raise ValidationError("We're sorry, you must be 13 or older to register")
agelint = AgeLint({'age': 12})
print agelint.validate() # False
print agelint.age.errors # ["We're sorry, you must be 13 or older to register"]
배열 형식 검증jsonlint 의 탄생 은 주로 배열 유형 을 어떻게 검증 하 는 문 제 를 해결 하기 위해 jsonlint 에서 쉽게 이 루어 진다 고 할 수 있다.
from jsonlint import Json
from jsonlint.fields import StringField, ListField
from jsonlint.validators import DataRequired, ValidationError
class ListLint(Json):
cars = ListField(StringField(validators=[DataRequired()]))
def validate_cars(form, field):
if 'BMW' in field.data:
raise ValidationError("We're sorry, you cannot drive BMW")
listlint = ListLint({'cars': ['Benz', 'BMW', 'Audi']})
print listlint.validate() # False
print listlint.cars.errors # ["We're sorry, you cannot drive BMW"]
ListField 류 는 Field 용기 로 서 다른 유형의 Field 를 수용 하 는 배열 로 해당 유형의 배열 을 직접 전송 하면 효과 적 인 검증 이 가능 합 니 다.ListField 역시 사용자 정의 인증 을 할 수 있 습 니 다.대상 유형 검증
대상 유형 은 일부 REST API 의 웹 응용 프로그램 에 도 자주 존재 하 는데 이에 대해 jsonlint 도 지원 했다.JSon 하위 클래스 를 Object Field 에 전송 하면 인증 할 수 있 습 니 다.
from jsonlint import Json
from jsonlint.fields import ObjectField, IntegerField, BooleanField
class T(Json):
status = BooleanField()
code = IntegerField()
class DataLint(Json):
data = ObjectField(T)
datalint = DataLint({'data': {'status': True, 'code': 200}})
print datalint.validate() # False
print datalint.data.code.data # 200
마지막 에 쓰다jsonlint 의 탄생 취 지 는 본인 이 wtforms 와 유사 한 방식 으로 json 을 검증 하고 싶 기 때 문 입 니 다.이렇게 하면 좋 은 검증 방식 을 가지 고 있 을 뿐만 아니 라 업 무 를 분할 하여 인터페이스 주 함수 가 지루 해 지지 않도록 하 는 것 입 니 다.예 를 들 어 클래스 를 정의 할 수 있 습 니 다.
class RegisterLint(UserLint):
def validata_nickname(self, field):
...
def validate_account(self, field):
...
def create_user(self):
...
user = RegisterLint()
이렇게 하면 RegisterLint 의 인 스 턴 스 user 로 데 이 터 를 검증 할 수 있 을 뿐만 아니 라 user.create 도 직접 실행 할 수 있 습 니 다.user()는 데이터 베 이 스 를 조작 하여 데이터 베 이 스 를 더욱 잘 패키지 합 니 다.이렇게 하면 MVC 디자인 모델 을 바탕 으로 한 층 독립 된 것 이 라 고 할 수 있다.jsonlint 를 사용 하려 면 pip 로 직접 설치 할 수 있 습 니 다:
pip install jsonlint
마지막 으로 jsonlint 는 Github 에서 시 작 됩 니 다.https://github.com/tangwz/jsonlintjsonlint 현 단 계 는 저 혼자 만 유지 합 니 다.유닛 테스트 보급률 이 가능 한 한 모두 덮어 쓰 지만 bug 가 없다 는 것 은 아 닙 니 다.소중 한 의견 을 제시 하거나 함께 유지 하고 교체 하 기 를 바 랍 니 다.jsonlint:
https://github.com/tangwz/jsonlint/issues
Flask 를 사용 하여 웹 개발 을 진행 하면 Flask 와 jsonlint 를 결합 한 라 이브 러 리 를 사용 할 수 있 습 니 다.Flask-Lint
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.