2017 © Pedro Peláez
 

library json-serializer

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

image

zumba/json-serializer

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  • Tuesday, June 19, 2018
  • by jrbasso
  • Repository
  • 12 Watchers
  • 79 Stars
  • 132,820 Installations
  • PHP
  • 12 Dependents
  • 0 Suggesters
  • 16 Forks
  • 4 Open issues
  • 9 Versions
  • 11 % Grown

The README.md

Json Serializer for PHP

Software License Build Status Total Downloads Latest Stable Version , (*1)

This is a library to serialize PHP variables in JSON format. It is similar of the serialize() function in PHP, but the output is a string JSON encoded. You can also unserialize the JSON generated by this tool and have you PHP content back., (*2)

Supported features:, (*3)

  • Encode/Decode of scalar, null, array
  • Encode/Decode of objects
  • Encode/Decode of binary data
  • Support nested serialization
  • Support not declared properties on the original class definition (ie, properties in stdClass)
  • Support object recursion
  • Closures (via 3rd party library. See details below)

Unsupported serialization content:, (*4)

  • Resource (ie, fopen() response)
  • NAN, INF constants

Limitations:, (*5)

  • Binary data containing null bytes (\u0000) as array keys cannot be properly decoded because of a json extension bug:
    • https://github.com/remicollet/pecl-json-c/issues/7
    • https://github.com/json-c/json-c/issues/108

This project should not be confused with JsonSerializable interface added on PHP 5.4. This interface is used on json_encode to encode the objects. There is no unserialization with this interface, differently from this project., (*6)

Json Serializer requires PHP >= 7.0 and tested until PHP 8.2, (*7)

Example


class MyCustomClass { public $isItAwesome = true; protected $nice = 'very!'; } $instance = new MyCustomClass(); $serializer = new Zumba\JsonSerializer\JsonSerializer(); $json = $serializer->serialize($instance); // $json will contain the content {"@type":"MyCustomClass","isItAwesome":true,"nice":"very!"} $restoredInstance = $serializer->unserialize($json); // $restoredInstance will be an instance of MyCustomClass

How to Install

If you are using composer, install the package zumba/json-serializer., (*8)

$ composer require zumba/json-serializer

Or add the zumba/json-serializer directly in your composer.json file., (*9)

If you are not using composer, you can just copy the files from src folder in your project., (*10)

Serializing Binary Strings

Binary strings introduce two special identifiers in the final json: @utf8encoded and @scalar. @utf8encoded is an array of keys from the original data which have their value (or the keys themselves) encoded from 8bit to UTF-8. This is how the serializer knows what to encode back from UTF-8 to 8bit when deserializing. Example:, (*11)

$data = ['key' => '<binaryvalue>', 'anotherkey' => 'nonbinaryvalue'];
$serializer = new Zumba\JsonSerializer\JsonSerializer();
$json = $serializer->serialize($data);
// $json will contain the content {"key":"<utf8encodedbinaryvalue>","anotherkey":"nonbinaryvalue","@utf8encoded":{"key":1}}

@scalar is used only when the value to be encoded is not an array or an object but a binary string. Example:, (*12)

$data = '<binaryvalue>';
$serializer = new Zumba\JsonSerializer\JsonSerializer();
$json = $serializer->serialize($data);
// $json will contain the content {"@scalar":"<utf8encodedbinaryvalue>","@utf8encoded":1}

Serializing Closure

For serializing PHP closures you can either use OpisClosure (preferred) or SuperClosure (the project is abandoned, so kept here for backward compatibility)., (*13)

Closure serialization has some limitations. Please check the OpisClosure or SuperClosure project to check if it fits your needs., (*14)

To use the OpisClosure with JsonSerializer, just add it to the closure serializer list. Example:, (*15)

$toBeSerialized = [
    'data' => [1, 2, 3],
    'worker' => function ($data) {
        $double = [];
        foreach ($data as $i => $number) {
            $double[$i] = $number * 2;
        }
        return $double;
    }
];

$jsonSerializer = new \Zumba\JsonSerializer\JsonSerializer();
$jsonSerializer->addClosureSerializer(new \Zumba\JsonSerializer\ClosureSerializer\OpisClosureSerializer());
$serialized = $jsonSerializer->serialize($toBeSerialized);

You can load multiple closure serializers in case you are migrating from SuperClosure to OpisClosure for example., (*16)

PS: JsonSerializer does not have a hard dependency of OpisClosure or SuperClosure. If you want to use both projects make sure you add both on your composer requirements and load them with addClosureSerializer() method., (*17)

Custom Serializers

Some classes may not be suited to be serialized and unserialized using the default reflection methods., (*18)

Custom serializers provide the ability to define serialize and unserialize methods for specific classes., (*19)

class MyType {
    public $field1;
    public $field2;
}

class MyTypeSerializer {
    public function serialize(MyType $obj) {
        return array('fields' => $obj->field1 . ' ' . $obj->field2);
    }

    public function unserialize($values) {
        list($field1, $field2) = explode(' ', $values['fields']);
        $obj = new MyType();
        $obj->field1 = $field1;
        $obj->field2 = $field2;
        return $obj;
    }
}

// map of "class name" => Custom serializer
$customObjectSerializers['MyType'] = new MyTypeSerializer();
$jsonSerializer = new Zumba\JsonSerializer\JsonSerializer(null, $customObjectSerializers);

$toBeSerialized = new MyType();
$toBeSerialized->field1 = 'x';
$toBeSerialized->field2 = 'y';
$json = $jsonSerializer->serialize($toBeSerialized);
// $json == {"@type":"Zumba\\\\JsonSerializer\\\\Test\\\\SupportClasses\\\\MyType","fields":"x y"}

$myType = $jsonSerializer->unserialize($json);
// $myType == $toBeSerialized

The Versions

19/06 2018

dev-master

9999999-dev http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-mbstring *

 

The Development Requires

json serializer serialize

07/02 2018

2.2.0

2.2.0.0 http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-mbstring *

 

The Development Requires

json serializer serialize

07/02 2018

dev-undeclared-property-mode

dev-undeclared-property-mode http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-mbstring *

 

The Development Requires

json serializer serialize

28/04 2016

2.1.0

2.1.0.0 http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

json serializer serialize

17/03 2016

2.0.1

2.0.1.0 http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

json serializer serialize

29/02 2016

2.0.0

2.0.0.0 http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

json serializer serialize

05/07 2014

1.0.2

1.0.2.0 http://tech.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.3.6

 

The Development Requires

json serializer serialize

12/04 2014

1.0.1

1.0.1.0 http://engineering.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.3.6

 

The Development Requires

json serializer serialize

06/01 2014

1.0.0

1.0.0.0 http://engineering.zumba.com

Serialize PHP variables, including objects, in JSON format. Support to unserialize it too.

  Sources   Download

MIT

The Requires

  • php >=5.3.6

 

The Development Requires

json serializer serialize