moodev/weasel

此包已被废弃且不再维护。未建议替代包。

PHP支持JSON和XML的对象打包库

v0.17 2015-04-15 12:31 UTC

README

Build Status

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就是结果。