2016-08-19 2 views
1

오늘 JSON 스키마가 내 요구 사항을 100 % 충족시키는 것으로 나타났습니다. 그러나 실제로 가장 기본적인 경우 중 하나를 가지고 견과를 몰고 있습니다. 이 게시물을 만들기 전에 필자는 기존의 문서를 따르기 위해 최선을 다했으며 도움이되는 것을 찾기 위해 인터넷에서 보았습니다.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

스키마입니다 내가 좋은 것을 사용하고 있는지, 같은 결과를 가지고 배열과 boolean으로도 시도했다. 여기

데이터

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

내가 필요한 idAsc 매개 변수의 부족을 감지하기 위해 다음 코드를 기대하고있다.

$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 목록을,

이제 모든 것이 나를 위해 마법처럼 노력하고 있습니다. 어느 쪽을 사용하고 있습니까? – Barmar

+0

@Barmar 내 "스택"섹션에서 찾을 수 있습니다 : justinrainbow/json-schema를 사용하여 실제로 작업 -> https://github.com/justinrainbow/json-schema –

답변

2

나는 마침내 그것을 디버깅 한 후에 JSON Schema의 구현을 디버깅 한 후에 사용했다 :

모든

첫째, 내가 JSON 스키마 나 자신을로드는 Github에서의 환매 특약보기에 주어진 예는 나를 위해 (https://github.com/justinrainbow/json-schema)을 파괴 할 :

$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 함수의 주석 라인에주의하십시오 : 이런 이유로 나는 스키마 자신을로드하는 대신 그것의 경로를 제공하기로 결정 둘 중 하나라도 작동하면 스키마는 배열이 아닌 객체 여야합니다!) 5 가지 JSON 스키마는 PHP에 대한 유효성 검사기

안부,

+1

도서관 소유자에게 자세한 내용을 문의하기위한 티켓을 만들기로 결정했습니다. https://github.com/justinrainbow/json-schema/issues/299 –

0

발리의 문제가 될 것 같다

+0

이것은 오늘 아침 내 과제 중 하나 일 것입니다. 하지만 이상하게 보입니다 ... 저는 Github의 기고자 수에 따라 가장 많이 사용되는 구현을 사용했습니다. –

+0

속성 정의에서 필수 ": true"속성을 제거하면 어떻게됩니까? 이 속성은 스키마 사양을 위반하지 않지만 영향을주지는 않지만 여전히 스키마 impl에 대한 예기치 않은 동작을 유발합니다. 나는 그것을 줄 것이다. – erosb

+0

이 게시물을 작성하기 전에 해봤지만 JSON 스키마 정의의 v4를 따르지 않아도됩니다.나는 마침내이 문제를 해결하고 나의 마지막 글을 자유롭게 읽으면서 내가 그 기술을 작동시키기 위해했던 것을 약간 설명했다. –