php-json-schema
php-json-schema copied to clipboard
Frustrated to understand the error structure
Here is an error I got when I try to validate
JSON Data
{
"name": "Slideshow",
"tag": "section",
"class": "slideshow",
"max_blocks": 5,
"settings": [
{
"id": "title",
"type": "text",
"label": "Slideshow"
}
],
"blocks": [
{
"name": "Slide",
"type": "slide",
"settings": [
{
"type": "image_picker",
"id": "image",
"label": "Image"
}
]
}
]
}
JSON schema
{
"$id": "/schemas/section",
"type": "object",
"properties": {
"name": { "type": "string"},
"tag": { "type": "string"},
"class": { "type": "string"},
"blocks": {
"$ref": "file://block.json"
},
"settings": {
"$ref": "file://settings.json"
},
"max_blocks": {
"type": "integer"
},
"presets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"blocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {"type": "string"}
}
}
}
}
}
},
"default": {
"type": "object",
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {"type": "string"}
}
}
}
}
},
"required": ["name"]
}
The error I got.
No valid results for anyOf {
0: No valid results for anyOf {
0: Array expected, "id" received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[0]->properties:oneOf->items[5]:5->$ref:file://types/image_picker.json->properties:required at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[0]->properties:oneOf->items[5]:5
1: Array expected, {"oneOf":[{"$ref":"file:\/\/types\/checkbox.json"},{"$ref":"file:\/\/types\/collection.json"},{"$ref":"file:\/\/types\/color_picker.json"},{"$ref":"file:\/\/types\/color.json"},{"$ref":"file:\/\/types\/header.json"},{"$ref":"file:\/\/types\/image_picker.json"},{"$ref":"file:\/\/types\/link_list.json"},{"$ref":"file:\/\/types\/product.json"},{"$ref":"file:\/\/types\/radio.json"},{"$ref":"file:\/\/types\/range.json"},{"$ref":"file:\/\/types\/richtext.json"},{"$ref":"file:\/\/types\/select.json"},{"$ref":"file:\/\/types\/text.json"},{"$ref":"file:\/\/types\/textarea.json"},{"$ref":"file:\/\/types\/url.json"},{"$ref":"file:\/\/types\/video_url.json"},{"$ref":"file:\/\/types\/video.json"}]} received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items->anyOf[1]
} at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings->$ref:file://settings.json->properties:items at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]->$ref:file://block.json->properties:properties->additionalProperties:settings at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[0]
1: Array expected, {"$ref":"file:\/\/block.json"} received at #->properties:properties->additionalProperties:blocks->properties:items->anyOf[1]
} at #->properties:properties->additionalProperties:blocks->properties:items
Can we bind the error to the JSON data instead of the JSON schema. I need to present the which property is missing, or invalid, our customer will be insane if we show the error above. Even me , unable to figure out what the JSON data is wrong from the error above. please let me know if this is possible please at the moment.
@videni may be $exception->getDataPointer() helps there?
try {
$result = $schema->in(json_decode(file_get_contents($dataFile)));
} catch (InvalidValue $e) {
return [
"dataPointer" => $e->getDataPointer(),
"schemaPointer" => $e->getSchemaPointer(),
"Message" => $e->getMessage()
]
}