Consider that you have example.json
with the following content:
{ "firstName": "Temuri", "lastName": "Takalandze", "active": true, "position": { "title": "Developer", "department": { "title": "IT" } } }
and several POPO classes to represent this JSON data:
Department.php
<?php class Department { /** * @var string */ private $title; // Getters and Setters here... }
Position.php
<?php class Position { /** * @var string */ private $title; /** * @var \ABGEO\POPO\Example\Department */ private $department; // Getters and Setters here... }
Person.php
<?php class Person { /** * @var string */ private $firstName; /** * @var string */ private $lastName; /** * @var bool */ private $active; /** * @var \ABGEO\POPO\Example\Position */ private $position; // Getters and Setters here... }
Now you want to convert this JSON to POPO with relations. The ABGEO07/json-to-popo package gives you this ability. Install it using Composer:
composer require abgeo/json-to-popo
Now let's create new ABGEO\POPO\Composer
object and read example.json
content:
$composer = new Composer(); $jsonContent = file_get_contents(__DIR__ . '/example.json');
Time for magic! Call composeObject()
with the contents of JSON and the main class, and this will give you POPO:
$resultObject = $composer->composeObject($jsonContent, Person::class);
Print $resultObject
:
var_dump($resultObject); //class ABGEO\POPO\Example\Person#2 (4) { // private $firstName => // string(6) "Temuri" // private $lastName => // string(10) "Takalandze" // private $active => // bool(true) // private $position => // class ABGEO\POPO\Example\Position#4 (2) { // private $title => // string(9) "Developer" // private $department => // class ABGEO\POPO\Example\Department#7 (1) { // private $title => // string(2) "IT" // } // } //}
Top comments (2)
Hi, I started work on something similar but uses PHP 8 attributes, take a look github.com/mrbenosborne/json-unmar....
Hi, this is better for me. github.com/Tharos/Schematic