pakman / json-parser
该软件包最新版本(v1.0)没有可用的许可证信息。
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: 2024-09-20 15:16:06 UTC
README
简单的JSON验证和格式转换解析器
安装
composer require pakman/json-parser
类型
默认情况下,解析器支持6种数据类型
- 整数
- 浮点数
- 字符串
- 电话号码
- 数组
- 对象
除此之外,还可以添加自定义类型。
使用示例
原始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!"