>source

jsonschema 및 python_jsonschema_objects 라이브러리를 사용하여 스키마 파일에서 파이썬 객체를 생성하고 해당 객체의 일부 데이터를 채운 다음 원래 스키마와 비교하여 유효성을 검사하려고합니다. 어떻게 든 내가 잘못하고 있다고 생각하지만 정확히 무엇을 확신하지 못합니다.

평면/단일 객체를 사용하여 배열을 제거 할뿐만 아니라 여러 가지 다른 스키마 및 데이터 값을 시도했습니다. 여전히 유효성 검사가 실패합니다.

from jsonschema import validate
import python_jsonschema_objects as pjs
import jsonschema
import json
import os
with open('geocoordinate/geocoordinatearray3.schema.json') as opfile:
   schema = json.load(opfile)
builder = pjs.ObjectBuilder(schema)
ns = builder.build_classes()
Coordinate = ns.Rootschema
ca = Coordinate(latitude=22.22,longitude=33.33)
print(ca.serialize())
try:
    print("about to validate first example")
    validate(instance=ca, schema=schema)
except jsonschema.exceptions. ValidationError as e:
    print("this is validation error:", e)
except json.decorder.JSONDecodeError as e:
    print("not JSON", e) 

이것은 스키마 파일입니다 :

   {
      "definitions": {},
      "$schema": "http://json-schema.org/draft-07/schema#",
      "$id": "http://example.com/root.json",
      "type": "object",
      "title": "rootSchema",
      "required": [
        "latitude",
        "longitude"
      ],
      "properties": {
        "location": {
          "$id": "#/properties/location",
          "type": "string",
          "title": "The Location Schema",
          "default": "",
          "examples": [
            "Denver, CO"
          ],
          "pattern": "^(.*)$"
        },
        "latitude": {
          "$id": "#/properties/latitude",
          "type": "number",
          "title": "The Latitude Schema",
          "default": 0.0,
          "examples": [
            39.7392
          ]
        },
        "longitude": {
          "$id": "#/properties/longitude",
          "type": "number",
          "title": "The Longitude Schema",
          "default": 0.0,
          "examples": [
            -104.9903
          ]
        },
        "alt": {
          "$id": "#/properties/alt",
          "type": "integer",
          "title": "The Alt Schema",
          "default": 0,
          "examples": [
            5280
          ]
        }
      }
    }

이것이 유효성을 검사 할 것으로 기대합니다. 내가하려고하는 것은 매우 간단합니다. 이 오류가 발생했습니다 :

첫 번째 예를 확인하려고 이것은 유효성 검사 오류입니다. 0>위도 = 22.22>위치 =>경도 = 33.33 >>'object'유형이 아닙니다

스키마에서 'type'유효성 검사에 실패했습니다 :

스키마

인스턴스 :

<rootschema alt=<Literal<int> 0> latitude=<Literal<float> 22.22> 
location=<Literal<str> > longitude=<Literal<float> 33.33>>


  • 답변 # 1

    작동하고 있는데 문제는 입력이었습니다. 파이썬 인스턴스를 가져 와서 serialize ()해야했습니다. 기본적으로 문자열 유형이라고 생각합니다. 도와 주셔서 감사합니다!

관련 자료

  • 이전 javascript - 60fps 게임 루프로 부드러운 보간 움직임 애니메이션
  • 다음 android - 세로 스크롤보기에서 이미지 버튼 옆에 텍스트를 정렬하는 방법