2016-10-14 3 views
0

다음 JSON 스키마가 있는데, idcontent이 모두 필요하지만 기본값은 빈 문자열입니다. 나는 다음과 같은 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 documentationJSON Schema draft 4을 준수한다고 주장합니다.

내가 뭘 잘못하고 있는지 알 수 있습니까?

감사합니다. 오늘로

답변

1

, 당신의 쇠고기하지 RapidJSON으로, JSON Schema validation spec 함께 :

4.3. Default values for missing keywords

일부 키워드가없는 경우, 은 디폴트 값을 가진 것으로 구현으로 간주 될 수있다. 이 경우 기본값이 언급됩니다.

결과 : 그들은 default제공 여전히 JSON 스키마 검증 사양에 부합 될 수있다하더라도 프로세서 누락 값을 무시하도록 허용

5.4.3. required

5.4.3.2. Conditions for successful validation 개체 인스턴스가이 키워드 에 유효합니다. 해당 속성 집합에 모든 elemen이 포함되어 있으면 이 키워드의 배열 값에 ts.

결과 : 유효성 검사기는 누락되었지만 필수 속성을 무시해서는 안됩니다.


무엇을 함께 줘? RapidJSON은 스키마 유효성 검사 중 required 속성에 대해 default 값을 고려하지 않은 경우에도 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를 참조하십시오. 어쩌면 당신은 그것을 사용하지 않는 것이 더 나을 것입니다.