wizaplace/json-decoder

此包已弃用,不再维护。未建议替换包。

当json_decode()无法解码JSON时抛出异常,并验证解码数据。

1.0.1 2019-03-26 13:24 UTC

This package is auto-updated.

Last update: 2021-10-26 18:58:43 UTC


README

Json解码组件

如何解码JSON

不要使用json_decode(),在PHP 7.3之前,解码失败时必须手动抛出异常。

创建JsonDecoder

您应该为需要解码的每个JSON创建一个类,该类继承自Wizacha\Json\Decoder\AbstractJsonDecoder

您的类应该配置AbstractJsonDecoder

class FooJsonDecoder extends AbstractJsonDecoder
{
    public function __construct()
    {
        $this
            // throw a Wizacha\Json\Exception\JsonDecodeNullException exception if json_decode() return null
            ->setAllowNull(true)
            // transform objects into associative arrays, 2nd parameter of json_decode()
            ->setAssociative(false)
            // depth, 3nd parameter of json_decode()
            ->setDepth(512)
            // transform bigint as string
            ->setBigIntAsString(false)
            // transform objects as arrays, useless if setAssociative(true)
            ->setObjectAsArray(false);
    }
    
    protected function configureDecodedJson(OptionsResolver $optionsResolver): parent
    {
        // if json_decode() return an array, configure expected keys
        // @see https://symfony.ac.cn/doc/current/components/options_resolver.html
        
        $optionsResolver
            ->setRequired('myKey')
            ->setAllowedTypes('myKey', 'string');
        
        return $this;
    }
}

使用您的JsonDecoder解码JSON

如果您的JsonDecoder不需要依赖项,您可以手动实例化它

$decodedJson = (new FooJsonDecoder())->decode($json);

如果它需要依赖项,将其注册为Symfony服务并使用它

$decodedJson = container()->get('json_decoder.foo')->decode($json);