dcarbone/ gojson
PHP库,旨在协助从基于Golang的服务中序列化和反序列化JSON数据
dev-main
2023-12-28 13:33 UTC
Requires
- php: ^8.1
- ext-json: *
Requires (Dev)
- phpunit/phpunit: @stable
This package is auto-updated.
Last update: 2024-08-28 15:04:38 UTC
README
工作正在进行中:这是一个正在进行中的工作,目前不适合实际使用。
PHP库,旨在协助从基于Golang的服务中序列化和反序列化JSON数据
转码类
Transcoding类是该包常量和一些辅助函数的容器。
反序列化特质
Unmarshaller特质旨在嵌入任何您希望从JSON反序列化的类。作为一个基本示例
use DCarbone\Go\JSON\Transcoding; use DCarbone\Go\JSON\Unmarshaller; class Classname { use Unmarshaller; protected const FIELDS = [ 'stringField' => [ Transcoding::FIELD_TYPE => Transcoding::STRING, ], 'intField' => [ Transcoding::FIELD_TYPE => Transcoding::INTEGER, ], 'floatField' => [ Transcoding::FIELD_TYPE => Transcoding::DOUBLE, ], ]; public string $stringField; public int $intField; public float $floatField; } $inst = Classname::UnmarshalGoJSON(<<<EOT { "stringField": "value", "intField": 1, "floatField": 1.1 } EOT );
序列化特质
Marshaller特质旨在嵌入任何您希望序列化为JSON的类。作为一个基本示例
use DCarbone\Go\JSON\Transcoding; class Classname { use \DCarbone\Go\JSON\Marshaller; protected const FIELDS = [ 'stringField' => [ Transcoding::FIELD_TYPE => Transcoding::STRING, Transcoding::FIELD_OMITEMPTY => true, ], 'intField' => [ Transcoding::FIELD_TYPE => Transcoding::INTEGER, Transcoding::FIELD_OMITEMPTY => true, ], 'floatField' => [ Transcoding::FIELD_TYPE => Transcoding::DOUBLE, Transcoding::FIELD_OMITEMPTY => true, ], ]; public string $stringField = ''; public int $intField = 1; public float $floatField = 0.0; } $inst = new Classname(); $json = $inst->MarshalGoJSON(); echo $json; // {"intField": 1}
FIELD_X 常量
"零"值
Go中的每个类型都有相应的"零"值。您可以参考Go之旅章节中的示例。
当序列化和反序列化Go类型与JSON时,这有重大影响,因为根据配置的结构体标签、使用的序列化器和字段类型,一个看似"空"的字段在访问时可能仍然有一个非空值。
为此,该库提供了一个Zero类型,允许您检查给定值是否为"零"。
自定义零值
在某些情况下,对于类型的"零值"或"默认值"字段,可能不希望使用null
。为此,您可以直接在类型上实现ZeroVal接口,或将ZeroState注册到Zero::$zeroStates静态参数。