moodev / weasel
PHP支持JSON和XML的对象打包库
Requires
- php: >=5.3.0
- doctrine/annotations: ~1.1
- doctrine/cache: ~1.0
- psr/log: ~1.0
- symfony/console: >=2.3
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 4.3.*
Suggests
- monolog/monolog: A logging framework that implements PSR 3
This package is not auto-updated.
Last update: 2021-02-19 22:16:51 UTC
README
Weasel是一个PHP对象打包库,支持JSON和XML。默认情况下,通过“注解”配置,由Doctrine\Common\Annotation
库驱动。
它还包括自己的注解库Weasel\Annotation
,但出于使用Doctrine的考虑,这个库已被弃用。
最新版本可在此找到:https://github.com/moodev/php-weasel
文档可在此找到:https://github.com/moodev/php-weasel/wiki
安装
如果可能,请使用composer。如果不能,您可以在composer.json中找到依赖项列表。
用法
为要序列化/反序列化的类添加注解(见文档。)
然后
$factory = new WeaselDoctrineAnnotationDrivenFactory(); // optionally: $factory->setCache($cacheInstance); $factory->setLogger($psr3LoggerInstance); $mapper = $factory->getJsonMapperInstance(); $thing = $mapper->readString($json, $typeToDecodeTo); $backToJson = $mapper->writeString($thing);
为什么?
json_decode()
解码为数组或stdObj。Weasel虽然内部使用json_decode()
,但映射到对象;它基本上是一个由配置驱动的JSON对象映射器。
同时,json_encode()
没有给你对数据如何序列化为JSON的精细控制。你无法禁用字段的打包,无法在不添加到你的类中的情况下添加类型信息,而且最令人烦恼的是,你无法控制如何将array()
映射到字段上。Weasel允许你配置每个字段如何打包:如果你有一个始终映射为JSON对象的数组,而其他数组需要映射为数组,你就可以做到这一点。
在那时,《XmlMarshaller》看起来是个好主意。可能并不是。它不完整且不受欢迎。一旦我找到更好的解决问题的方法,它就会被弃用。
该项目源于对moo-php的工作,这是moo.com API的客户端库。在编写特定于该对象结构的序列化/反序列化代码后,我意识到一个通用、可配置的打包器,类似于Java世界的Jackson,将会非常有用。Weasel就是结果。