pakman / json-parser
There is no license information available for the latest version (v1.0) of this package.
v1.0
2020-05-19 18:59 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2025-03-20 16:27:12 UTC
README
Простой парсер для валидации и преобразования JSON в нужный формат
Установка
composer require pakman/json-parser
Типы
По умолчанию парсер поддерживает 6 типов данных
- integer
- float
- string
- phone
- array
- object
Помимо этого можно добавлять собственные типы.
Пример использования
Исходный JSON
{
"foo": {
"a": "1",
"b": "str",
"c": "2.1",
"d": [
"1",
"2"
],
"e": {
"a": "1"
}
},
"bar": "8 (950) 288-56-23"
}
Валидация и приведение к нужному формату
$json = '{"foo": {"a": "1", "b": "str", "c": "2.1", "d": ["1", "2"], "e": {"a": "1"}}, "bar": "8 (950) 288-56-23"}'; $typeDefinitions = TypeDefinitions::define() ->object('foo', TypeDefinitions::define() ->integer('a') ->string('b') ->float('c') ->array('d', TypeDefinitions::INTEGER) ->object('e', TypeDefinitions::define()->integer('a')) ) ->phone('bar') ; $parser = new JsonParser($typeDefinitions); $result = $parser->parse($json); var_dump($result);
Результатом будет:
array(4) 'foo' => array(4) 'a' => int(1) 'b' => string(3) "str" 'c' => float(2.1) 'd' => array (2) 0 => int(1) 1 => int(2) 'e' => array(1) 'a' => int(1) 'bar' => string(11) "79502885623"
Добавление собственного типа
-
Создать парсер, который будет приводить данные к нужному типу (Класс должен наследовать
pakman\jsp\parsers\Parser
):... use pakman\jsp\parsers\Parser; class HelloWorldParser extends Parser { public function parse($data): array { if ($data !== 'Hello') { throw new ValidationException(); } return $data . ' world!'; } }
-
Добавить класс в конфигурационный файл
src/config/parsers.php
:... use path\to\HelloWorldParser; return [ ... 'HELLO_WORLD_TYPE' => 'HelloWorldParser::class' ];
-
Использовать его
$json = '{"foo": {"Hello"}}'; $typeDefinitions = TypeDefinitions::define() ->add('foo', 'HELLO_WORLD_TYPE') ; $parser = new JsonParser($typeDefinitions); $result = $parser->parse($json); var_dump($result); // array(1) // 'foo' => string(12) "Hello world!"