def check_json_j2[]: includes = r'|'.join[[fnmatch.translate[x] for x in JSON_J2_INCLUDE_PATTERNS]] excludes = r'|'.join[[fnmatch.translate[x] for x in JSON_J2_EXCLUDE_PATTERNS]] return_code = 0 def bool_filter[value]: return True def basename_filter[text]: return text.split['\\'][-1] def kolla_address_filter_mock[network_name, hostname=None]: # no validation is possible for the hostname if network_name not in KOLLA_NETWORKS: raise ValueError["{network_name} not in KOLLA_NETWORKS" .format[network_name=network_name]] return "127.0.0.1" # Mock ansible hostvars variable, which is a nested dict def hostvars[]: return collections.defaultdict[hostvars] # Mock Ansible groups variable, which is a dict of lists. def groups[]: return collections.defaultdict[list] def validate_json_j2[root, filename]: env = jinja2.Environment[ # nosec: not used to render HTML loader=jinja2.FileSystemLoader[root]] env.filters['bool'] = bool_filter env.filters['basename'] = basename_filter env.filters['kolla_address'] = kolla_address_filter_mock env.filters['put_address_in_context'] = \ put_address_in_context template = env.get_template[filename] # Mock ansible variables. context = { 'hostvars': hostvars[], 'groups': groups[], 'cluster_interface': 'cluster_interface', 'storage_interface': 'storage_interface', 'inventory_hostname': 'hostname' } data = template.render[**context] json.loads[data] for root, dirs, files in os.walk[PROJECT_ROOT]: dirs[:] = [d for d in dirs if not re.match[excludes, d]] for filename in files: if not re.match[excludes, filename] and \ re.match[includes, filename]: fullpath = os.path.join[root, filename] try: validate_json_j2[root, filename] except [ValueError, jinja2.exceptions.TemplateError]: return_code = 1 LOG.exception['%s file error', fullpath] return return_code
Ký hiệu đối tượng JSON hoặc Javascript hoạt động khá tốt trong Python. Có 2 thuộc tính có thể có mà chúng ta cần xem xét để biết JSON có ở định dạng phù hợp hay không. Đầu tiên là đảm bảo rằng tất cả các dấu ngoặc kép, dấu ngoặc và dấu phẩy đều ở đúng vị trí. Thứ hai là xác thực kết quả đó với lược đồ JSON
kiểm tra. py
import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
Chạy thử nghiệm để xem đầu ra trông như thế nào
Phần cuối
$ python test.py
{u'lastName': u'Doe', u'firstName': u'John'}
DEBUG: JSON data contains an error
False
Khi chúng tôi đã tải JSON và chúng tôi biết rằng nó đúng về mặt cú pháp. Bây giờ chúng ta có thể bắt đầu thử nghiệm lược đồ JSON. Hãy tải lên bài kiểm tra đó. py một lần nữa và thêm lược đồ JSON
kiểm tra. py
import json
from jsonschema import validate
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
data = '{"firstName": "John", "lastName": "Doe"}'
jsd = validate_json_syntax[data]
schema = {
"type": "object",
"properties": {
"firstName": { "type": "string"},
"lastName": { "type": "string"}
}
}
#output will be None
print[validate[jsd, schema]]
Đây chỉ là một ví dụ về đường dẫn hạnh phúc để xác thực lược đồ JSON. Nhưng nếu vì lý do nào đó mà chúng ta thực sự muốn LastName là một số thì sao? . Sau đó chạy chương trình và xem điều gì sẽ xảy ra
Bài đăng trên blog này sẽ giúp bạn hiểu xác thực Lược đồ JSON trong Python, sử dụng
import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
6 trình xác thực Lược đồ JSON hoàn chỉnh và tuân thủ nhấtDự án GITHUB. python-xác thực-json-lược đồ
Lược đồ JSON là một đặc tả cho định dạng dựa trên JSON để xác định cấu trúc của dữ liệu JSON. Nó được viết theo dự thảo của IETF đã hết hạn vào năm 2011. Lược đồ JSON
- Mô tả định dạng dữ liệu hiện tại của bạn
- Tài liệu rõ ràng, con người và máy có thể đọc được
- Hoàn thành xác thực cấu trúc, hữu ích cho thử nghiệm tự động
- Hoàn thành xác thực cấu trúc, xác thực dữ liệu do khách hàng gửi
Hiện tại, trình xác thực Lược đồ JSON hoàn chỉnh và tuân thủ nhất có sẵn cho python là
import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
6Đưa ra dưới đây là một lược đồ JSON cơ bản, bao gồm các chi tiết cơ bản về người dùng
{
"$schema":"//json-schema.org/draft-04/schema#",
"title":"User",
"description":"A user request json",
"type":"object",
"properties":{
"id":{
"description":"The unique identifier for a user",
"type":"integer"
},
"name":{
"description":"Name of the user",
"type":"string"
},
"contact_number":{
"type":"number"
}
},
"required":[
"id",
"name",
"contact_number"
]
}
import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
8 là một triển khai Lược đồ JSON cho Python. Sử dụng import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
8, chúng tôi có thể tạo một lược đồ theo lựa chọn của mình, vì vậy, mỗi khi chúng tôi có thể xác thực tài liệu JSON dựa trên lược đồ này, nếu nó được thông qua, chúng tôi có thể nói rằng tài liệu JSON hợp lệKeywordDescription$schema Từ khóa $schema nói rằng lược đồ này được viết theo đặc điểm kỹ thuật dự thảo v4. tiêu đềBạn sẽ sử dụng điều này để đặt tiêu đề cho lược đồ của mình. mô tảMột mô tả nhỏ về lược đồ. type Từ khóa type xác định ràng buộc đầu tiên đối với dữ liệu JSON của bạn. nó phải là một Đối tượng JSON. propertiesXác định các khóa khác nhau và các loại giá trị của chúng, giá trị tối thiểu và tối đa sẽ được sử dụng trong tệp JSON. bắt buộcĐiều này giữ một danh sách các thuộc tính cần thiết. tối thiểuĐây là ràng buộc được đặt trên giá trị và đại diện cho giá trị tối thiểu có thể chấp nhận được. ExclusiveMinimumNếu “exclusiveMinimum” xuất hiện và có giá trị boolean là true, thì phiên bản hợp lệ nếu nó hoàn toàn lớn hơn giá trị của “minimum”. tối đaĐây là ràng buộc được đặt trên giá trị và đại diện cho giá trị tối đa có thể chấp nhận được. ExclusiveMaximumNếu “exclusiveMaximum” xuất hiện và có giá trị boolean là true, thì phiên bản hợp lệ nếu nó hoàn toàn thấp hơn giá trị của “maximum”. multipleOfA thể hiện số hợp lệ đối với “multipleOf” nếu kết quả của phép chia thể hiện cho giá trị của từ khóa này là một số nguyên. maxLengthĐộ dài của một thể hiện chuỗi được định nghĩa là số ký tự tối đa của nó. minLengthĐộ dài của một thể hiện chuỗi được định nghĩa là số ký tự tối thiểu của nó. mẫuMột thể hiện chuỗi được coi là hợp lệ nếu biểu thức chính quy khớp thành công với thể hiệnBạn có thể kiểm tra một http. // json-lược đồ. org để biết danh sách đầy đủ các từ khóa có thể được sử dụng để xác định lược đồ JSON. Lược đồ trên có thể được sử dụng để kiểm tra tính hợp lệ của mã JSON sau đây
Đầu tiên, cài đặt
import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
8 bằng lệnh pippip install jsonschema
Tập lệnh Python
import json
import jsonschema
from jsonschema import validate
def get_schema[]:
"""This function loads the given schema available"""
with open['user_schema.json', 'r'] as file:
schema = json.load[file]
return schema
def validate_json[json_data]:
"""REF: //json-schema.org/ """
# Describe what kind of json you expect.
execute_api_schema = get_schema[]
try:
validate[instance=json_data, schema=execute_api_schema]
except jsonschema.exceptions.ValidationError as err:
print[err]
err = "Given JSON data is InValid"
return False, err
message = "Given JSON data is Valid"
return True, message
# Convert json to python object.
jsonData = json.loads['{"id" : "10","name": "DonOfDen","contact_number":1234567890}']
# validate it
is_valid, msg = validate_json[jsonData]
print[msg]
Nhập Json
{"id" : 10,"name": "DonOfDen","contact_number":1234567890}
- Trước tiên, chúng tôi chuyển đổi JSON đầu vào thành đối tượng python bằng cách sử dụng
1, sau đó sử dụng hàmpip install jsonschema
8import json def validate_json_syntax[d]: try: return json.loads[d] except ValueError: print['DEBUG: JSON data contains an error'] return False #will return the data data = '{"firstName": "John", "lastName": "Doe"}' print validate_json_syntax[data] #will return false because JSON not valid #missing quotes around lastName data = '{"firstName": "John", lastName: "Doe"}' print validate_json_syntax[data]
3, chúng tôi xác thực đầu vào đã cho bằng Lược đồ JSON được cung cấppip install jsonschema
Nếu bạn cố chạy đoạn mã trên, đầu ra sẽ là
pip install jsonschema
4Thử nghiệm với loại đầu vào khác
Hãy kiểm tra với đầu vào json thay thế, Nếu bạn kiểm tra tập lệnh python ở trên Phương thức
pip install jsonschema
5 sẽ đưa ra một ngoại lệ nếu JSON đã cho không phải là thứ được mô tả trong lược đồimport json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
2Trong json đầu vào ở trên, chúng tôi đã sửa đổi
pip install jsonschema
6 từ số nguyên thành chuỗi pip install jsonschema
7import json
def validate_json_syntax[d]:
try:
return json.loads[d]
except ValueError:
print['DEBUG: JSON data contains an error']
return False
#will return the data
data = '{"firstName": "John", "lastName": "Doe"}'
print validate_json_syntax[data]
#will return false because JSON not valid
#missing quotes around lastName
data = '{"firstName": "John", lastName: "Doe"}'
print validate_json_syntax[data]
5Thẩm quyền giải quyết
Vui lòng tham khảo python-validate-json-schema một trong những dự án của tôi, nơi tôi đã học cách triển khai ở trên