PHP code example of ropi / json-schema-evaluator
1. Go to this page and download the library: Download ropi/json-schema-evaluator library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ropi / json-schema-evaluator example snippets
$schema = json_decode('{
"type": "string",
"maxLength": 5
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
// Each JSON Schema must be statically analyzed once.
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012()
));
$instance1 = "hello";
$evaluator->evaluate($instance1, $staticEvaluationContext); // Returns true
$instance2 = "helloworld";
$evaluator->evaluate($instance2, $staticEvaluationContext); // Returns false
$valid = $evaluator->evaluate(
instance: $instance2,
staticEvaluationContext: $staticEvaluationContext,
results: $results
);
foreach ($results as $result) {
/** @var $result \Ropi\JsonSchemaEvaluator\EvaluationContext\RuntimeEvaluationResult */
if ($result->type === 'error') {
echo "Error keyword location: '{$result->keywordLocation}'\n";
echo "Error instance location: '{$result->instanceLocation}'\n";
echo "Error message: {$result->error}\n";
}
}
$formattedResults = (new \Ropi\JsonSchemaEvaluator\Output\BasicOutput($valid, $results))->format();
echo json_encode($formattedResults, JSON_PRETTY_PRINT);
$schema = json_decode('{
"type": "object",
" "default": "n/a"
}
}
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
evaluateMutations: true
)
));
$instance = (object) [
'lastname' => 'Gauss'
];
$evaluator->evaluate($instance, $staticEvaluationContext);
echo $instance->firstname; // Prints "n/a"
$schema = json_decode('{
"contentMediaType": "application/json",
"contentEncoding": "base64"
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
evaluateMutations: true
)
));
$instance = 'eyJmb28iOiAiYmFyIn0K'; // Base64 encoded JSON '{"foo": "bar"}'
$evaluator->evaluate($instance, $staticEvaluationContext); // Returns true
echo $instance; // Prints '{"foo": "bar"}'
$schema = json_decode('{
"contentMediaType": "application/json"
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
assertContentMediaTypeEncoding: true
)
));
$instance = '{"foo": "bar"}';
$evaluator->evaluate($instance, $staticEvaluationContext); // Returns true
$instance2 = 'invalidJSON';
$evaluator->evaluate($instance2, $staticEvaluationContext); // Returns false
$schema = json_decode('{
"format": "email"
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
assertFormat: true
)
));
$instance = '[email protected] ';
$evaluator->evaluate($instance, $staticEvaluationContext, $runtimeEvaluationConfig); // Returns true
$instance2 = 'invalidEmail';
$evaluator->evaluate($instance2, $staticEvaluationContext, $runtimeEvaluationConfig); // Returns false
$config = new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
shortCircuit: true
)
);
$schema = json_decode('{
"type": "integer"
}');
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: new \Ropi\JsonSchemaEvaluator\Draft\Draft202012(
acceptNumericStrings: true
)
));
$instance = json_decode('6565650699413464649797946464646464649797979', false, 512, JSON_BIGINT_AS_STRING);
$evaluator->evaluate($instance, $staticEvaluationContext); // Returns true
$schema = json_decode('{
"md5Hash": "098f6bcd4621d373cade4e832627b4f6"
}');
class Md5HashKeyword extends \Ropi\JsonSchemaEvaluator\Keyword\AbstractKeyword implements \Ropi\JsonSchemaEvaluator\Keyword\RuntimeKeywordInterface
{
public function getName() : string
{
return "md5Hash";
}
public function evaluate(mixed $keywordValue, \Ropi\JsonSchemaEvaluator\EvaluationContext\RuntimeEvaluationContext $context): ?\Ropi\JsonSchemaEvaluator\EvaluationContext\RuntimeEvaluationResult
{
$instance = $context->getCurrentInstance();
if (!is_string($instance)) {
// Ignore keyword, because instance is not a string
return null;
}
$result = $context->createResultForKeyword($this, $keywordValue);
if (md5($instance) !== $keywordValue) {
$result->invalidate('MD5 hash of "' . $instance . '" does not match ' . $keywordValue);
}
return $result;
}
}
$draft = new \Ropi\JsonSchemaEvaluator\Draft\Draft202012();
$draft->registerKeyword(new Md5HashKeyword(), 'https://example.tld/draft/2022-03/vocab/md5'); // Register keyword with custom vocabulary
$evaluator = new \Ropi\JsonSchemaEvaluator\JsonSchemaEvaluator();
$staticEvaluationContext = $evaluator->evaluateStatic($schema, new \Ropi\JsonSchemaEvaluator\EvaluationConfig\StaticEvaluationConfig(
defaultDraft: $draft
));
$instance = 'test';
$evaluator->evaluate($instance, $staticEvaluationContext); // Returns true, because md5 hash matches
$instance = 'hello';
$evaluator->evaluate($instance, $staticEvaluationContext); // Returns false, because md5 hash does not match