2017-12-11 7 views
1

スキーマにスキーマが1つしかないか、oneOfプロパティを持つスキーマがいくつか含まれているかどうかを確認します。jsonスキーマにoneOfタイプのスキーマがあるかどうかを検出

Pythonのコードは基本的に私はSCHEMA2

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

SCHEMA1

スキーマのこれらの2種類を区別することができるようにしたい、この

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

のようなものでなければなりません

これをPythonでどうやって行うことができますか?

編集:ここに私の例のスキーマ

+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の 'スキーマ'部分のみをチェックしたい場合は、親プロパティをチェックする必要があります。出力

​​
+0

まさに私が望んでいたもの! – Arteezy

+0

ただの簡単なメモ。私がコードで見るものから、 "oneOf"はツリーの下にあります。したがって、あなたが見ている(サブ)スキーマに属していない可能性があります。 $ refではコードが機能しません。 – Clemens

関連する問題