dcarbone/gojson

PHP库,旨在协助从基于Golang的服务中序列化和反序列化JSON数据

资助包维护!
dcarbone

dev-main 2023-12-28 13:33 UTC

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静态参数。