open-code-modeling / json-schema-to-php
Parses JSON schema files and provides an API to easily generate code from JSON schema.
0.3.0
2021-02-11 21:29 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- jangregor/phpstan-prophecy: ^0.8.0
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^0.12.33
- phpstan/phpstan-strict-rules: ^0.12.4
- phpunit/phpunit: ^9.2.6
- prooph/php-cs-fixer-config: ^0.3
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.4
README
Parses JSON schema and provides an API to easily generate code from JSON schema.
Installation
$ composer require open-code-modeling/json-schema-to-php --dev
Usage
Consider you have this JSON schema.
{ "type": "object", "required": ["buildingId", "name"], "additionalProperties": false, "definitions": { "name": { "type": ["string", "null"] } }, "properties": { "buildingId": { "type": "string", "pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$" }, "name": { "$ref": "#/definitions/name" } } }
Create a TypeSet definition from parsed JSON:
$decodedJson = \json_decode($jsonSchema, true); $typeSet = Type::fromDefinition($decodedJson); /** @var ObjectType $type */ $type = $typeSet->first(); $type->additionalProperties(); // false $properties = $type->properties(); /** @var TypeSet $buildingIdTypeSet */ $buildingIdTypeSet = $properties['buildingId']; /** @var StringType $buildingId */ $buildingId = $buildingIdTypeSet->first(); $buildingId->name(); // buildingId $buildingId->type(); // string $buildingId->pattern(); // ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$ $buildingId->isRequired(); // true $buildingId->isNullable(); // false /** @var TypeSet $nameTypeSet */ $nameTypeSet = $properties['name']; /** @var ReferenceType $name */ $name = $nameTypeSet->first(); $resolvedTypeSet = $name->resolvedType(); /** @var StringType $resolvedType */ $resolvedType = $resolvedTypeSet->first(); $resolvedType->name(); // name $resolvedType->type(); // string $resolvedType->isRequired(); // true $resolvedType->isNullable(); // true // ...
See OpenCodeModeling\JsonSchemaToPhp\Type
classes and tests for more information.