2017-12-11 15 views
1

스키마에 스키마가 하나만 있는지 또는 oneOf 속성을 사용하여 스키마가 여러 개 있는지 확인하고 싶습니다.json 스키마에 oneOf 유형 스키마가 있는지 검색

파이썬 코드는

If schema1 has oneOf property: 
    Some code1 
If schema1 is just a single schema: 
    Some code2 

같은 것을 기본적으로 내가 스키마

의 이러한 두 종류의 사이에 Schema1을

"schema1": { 
    "definitions": { 
     "schema": { 
      "type": "object", 
      "properties": { 
       "name": { 
        "type": ["string", "null"] 
       } 
      } 
     } 
    } 
} 

Schema2

"schema2": { 
    "definitions": { 
     "schema": { 
      "oneOf": [ 
      { 
       "type": ["null"] 
      }, 
      { 
       "type": ["string"], 
       "enum": ["NONE"] 
      } 
      ] 
     } 
    } 
} 
을 구별 할 수 할 수 있어야

어떻게 이것을 파이썬에서 할 수 있습니까?

편집 : 수정 내 예를 들어, 스키마

+0

#!/usr/bin/env python import json def objectHasKey(object_,key_): _result = False if (type(object_)==dict): for _key in object_.keys(): print _key if (type(object_[_key])==dict): _dict = object_[_key] _result = objectHasKey(_dict,key_) if _key == key_: _result = True if _result: break return _result firstJSONText = ''' { "definitions": { "schema": { "type": "object", "properties": { "name": { "type": [ "string", "null" ] } } } } } ''' first = json.loads(firstJSONText) secondJSONText = ''' { "definitions": { "schema": { "oneOf": [ { "type": [ "null" ] }, { "type": [ "string" ], "enum": [ "NONE" ] } ] } } } ''' second = json.loads(secondJSONText) target = first if objectHasKey(target,'oneOf'): print "Handle oneOf with first" else: print "Handle default with first" target = second if objectHasKey(target,'oneOf'): print "Handle oneOf with second" else: print "Handle default with second" 

예 호출은 스키마는 '잘못된'보고 - 그들은 당신이 작업중인 실제 스키마 ... 자체가 명시 적으로있는 스키마 상태 그렇다면 개체가 있습니다. 그렇지 않은 경우 어떤 스키마가 있는지 확인해야하는 샘플 데이터를 보여주십시오. –

+0

@KeithJohnHutchison 질문에서 예제 스키마를 수정했습니다. 이것은 내가 사용하고있는 정확한 스키마가 아니지만 비슷합니다. 편집 한 내용이 현재 스키마를 수정하거나 여전히 잘못 되었습니까? – Arteezy

답변

1

여기에 제공되는 JSON에서 oneOf 속성이있는 경우 반복적으로 확인하는 방법을 보여주는 예입니다. 특히 json의 '스키마'부분 만 확인하려는 경우 상위 속성을 확인해야합니다. 출력

csmu-macbook-pro-2:detect-if-a-json-schema-has-a-oneof-type-schema admin$ ./test-for-schema.py 
definitions 
schema 
type 
properties 
name 
type 
Handle default with first 
definitions 
schema 
oneOf 
Handle oneOf with second 
+0

정확히 내가 원했던 것이 !!! – Arteezy

+0

그냥 잠깐. 코드에서 볼 수 있듯이 "oneOf"는 트리 아래에 있습니다. 그래서 당신이보고있는 (하위) 스키마에 속하지 않을 수도 있습니다. $ ref에서는 코드가 작동하지 않습니다. – Clemens