2016-10-14 4 views
0

私はidcontentの両方を必要とするが、後者は空の文字列にデフォルトのJSONスキーマを持っています。私は次のようなJSON文字列を検証しようとしているデフォルトのプロパティを扱うためにRapidJSONスキーマを取得する方法

{ 
    "type": "object", 
    "properties": { 
     "id": { "type": "string" }, 
     "content": { "type": "string", "default": "" } 
    }, 
    "required": [ "id", "content" ], 
    "additionalProperties": false 
} 

:そのために

{ 
    "id": "some id" 
} 

を、私は次のコードを持っている:

rapidjson::Document document; 
document.Parse(schemaJson.c_str()); 

rapidjson::SchemaDocument schemaDocument(document); 
rapidjson::SchemaValidator validator(schemaDocument); 

rapidjson::Document modelDoc; 
modelDoc.Parse(modelJson.c_str()); 

modelDoc.Accept(validator); // Complains about missing property 

を受け入れるコールにもかかわらず、検証に失敗しましたプロパティにはデフォルト値があります。

RapidJSON schema documentationは、JSON Schema draft 4に準拠しています。

誰かが私が間違っているかもしれないことを知っていますか?

ありがとうございました。今日のよう

答えて

1

は、あなたの牛肉はないRapidJSONで、JSON Schema validation specである:

4.3. Default values for missing keywords

いくつかのキーワードは、不在の場合は、MAYは、デフォルト値を持つものとして実装によって見なされます。この場合、デフォルト値が説明されます。

結果:彼らはdefaultを提供し、依然としてJSONスキーマ検証仕様に準拠することがあっても、プロセッサ欠損値を無視することを許可され

5.4.3. required

5.4.3.2. Conditions for successful validation オブジェクトインスタンスは、このキーワードに対してプロパティセットがすべてのelemenを含む場合に有効ですこのキーワードの配列の値にはが含まれています。

結果:バリデーターは、欠落しているが必須のプロパティーを無視してはいけません。


2つを一緒に入れて、何を与えるのですか?スキーマの検証中にrequiredのプロパティの値がdefaultであるとはみなされない場合でも、RapidJSONはJSONスキーマの検証に準拠すると依頼できます。

あなたはまだ私はいくつかのオンラインバリデーターを試してみましたissues page of RapidJson project

1

これは、達成しようとしているものに適したスキーマです。

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "definitions": {}, 
    "id": "example", 
    "properties": { 
    "content": { 
     "default": "1", 
     "id": "/properties/content", 
     "type": "string" 
    }, 
    "id": { 
     "id": "/properties/id", 
     "type": "string" 
    } 
    }, 
    "required": [ 
    "content", 
    "id" 
    ], 
    "type": "object", 
    "additionalProperties": false 
} 

また、私は多くのJSONスキーマdefaultキーワードを無視まっすぐバリこと、JSONスキーマを理解する上でhereをお読みください。多分あなたはそれを使用しない方が良いでしょう。

関連する問題