2016-08-19 9 views
1

JSONスキーマが今日私のニーズに合っているように見えましたが、実際には最も基本的なケースの1つで、この投稿を作成する前に、私は明らかに既存のドキュメントに従うよう最善を尽くし、インターネット上で何か助けを見つけることを試みました。JSONスキーマ:必要なプロパティが無視されました

スタック: - :

{ 
    "description":"UserCreate", 
    "type":"object", 
    "properties":{ 
     "login":{ 
     "type":"string", 
     "required":true 
     }, 
     "idAsc":{ 
     "type":"string", 
     "required":true 
     } 
    }, 
    "required":[ 
     "login", 
     "idAsc" 
    ] 
} 

あなたは私だけに、両方必要な定義(ブール値、配列)を使用しています見ることができるようにPHP7 justinrainbow/JSONスキーマここでは2.0.5

はスキーマです私は良いものを使用していることを確認してください、私は同じ結果で配列やブール値だけでも試しました。ここで

は、私は必要なidAscパラメータの欠如を検出するために、次のコードを期待していたデータ

{ 
    "login":"[email protected]" 
} 

です。

$validator = new JsonSchema\Validator; 
$validator->check($data, $schema); 
if ($validator->isValid() == false) 
    echo("Missing something"); 
else 
    echo("Good"); 

しかし、このコードは、私は間違いなくJSONスキーマについての何かをしないのです...「グッド」印刷を保つ。あなたの助けを

感謝の、よろしく。

+0

http://json-schema.org/implementations.html 5異なるJSONスキーマは、PHPのためのバリデータ一覧表示されます。あなたはどちらを使っていますか? – Barmar

+0

@Barmar私の "スタック"セクションで見つけることができます:実際にjustinrainbow/json-schemaで作業しています - > https://github.com/justinrainbow/json-schema –

答えて

2

私はついにJSON Schemaの実装を段階的にデバッグしてから使用していました:

これは動作しませんでした。

まず第一に、私は(https://github.com/justinrainbow/json-schema)GitHubのレポを見に与えられた例では、私のために破壊され、JSONスキーマを自分でロード:

$data = json_decode(file_get_contents('data.json')); 

// Validate 
$validator = new JsonSchema\Validator; 
$validator->check($data, (object)['$ref' => 'file://' . realpath('schema.json')]); 

私はのfile_get_contentsや親戚への呼び出しを見つけることができませんでしたステップバイステップで私のステップ中にライブラリの中に。あなたは真の第二パラメータとしてそれがないだろうとjson_decodeを使用する場合

function getSchema($filePath) { 
    // NOT WORKING -> return json_decode(file_get_contents($filePath), true); 
    return json_decode(file_get_contents($filePath)); 
} 

$data = json_decode($rest->getRequest()->getBody()); 
$schema = $this->getSchema(realpath('controllers/schemas/userCreate.json')); 

$validator = new JsonSchema\Validator; 
$check_return = $validator->check($data, $schema); 

、GETSCHEMA関数のコメント行に注意してください:このような理由から、私は、スキーマ自身をロードする代わりに、それへのパスを与えることにしましたスキーマは配列ではなくオブジェクトでなければなりません!

今すべては私にとって魅力のように働いている;)

敬具、

+1

私は図書館のオーナーに詳細を尋ねるチケットを作成することにしました: https://github.com/justinrainbow/json-schema/issues/299 –

0

バリの問題のようです

+0

これは今朝の私の仕事の1つになるでしょう。しかし私には不思議そうです...私はGithubの貢献者の数に応じて最も人気のある実装を使用しました。 –

+0

プロパティ定義から 'required::true'プロパティを削除するとどうなりますか?このプロパティはスキーマ仕様に違反しませんが、何の効果もありませんが、スキーマimplに対して予期しない動作が発生します。私はそれに行くだろう。 – erosb

+0

この投稿の作成前でも試してみましたが、必要なのはこれがJSONスキーマ定義のv4に従わないことです。私は最終的にこれを修正して、私の最後の投稿を読んでください。ここで、私はそれを動作させるために何をしたのか説明しました。 –

関連する問題