Skip to content
master
Switch branches/tags
Code

Gson PHP

Build Status Code Coverage Scrutinizer Code Quality SensioLabsInsight

This library is a port of google/gson written in PHP. Its purpose is to easily handle the conversion between PHP objects and JSON. It shares some of google/gson's goals such as:

  • A simple interface using toJson and fromJson methods
  • Enable serialization and deserialization of 3rd party classes
  • Allow schema differences between PHP objects and JSON

And in addition:

  • Utilize PHP 7 scalar type hints to be intelligent about property types
  • Limit the number of annotations required to use
  • Allow serialization decisions based on runtime information

Overview

Here are some simple use cases to get a feel for how the library works

If you have a PHP object you want to convert to JSON

// $object obtained elsewhere

$gson = Gson::builder()->build();
$json = $gson->toJson($object);

What this is doing is using the provided GsonBuilder to set up the Gson object with sensible defaults. Calling Gson::toJson and passing in an object will return a string of JSON.

If you need to, you can force the type Gson will use to serialize

// $object obtained elsewhere

$gson = Gson::builder()->build();
$json = $gson->toJson($object, MyCustomClass::class);

The reverse is very similar

// $json obtained elsewhere

$gson = Gson::builder()->build();
$fooObject = $gson->fromJson($json, Foo::class);

Now we call Gson::fromJson and pass in the json as a string and the type of object we'd like to map to. In this example, we will be getting an instantiated Foo object back.

Gson has a concept of "normalized" forms. This just means data that has been decoded with json_decode, or can be passed into json_encode.

// $object obtained elsewhere

$gson = Gson::builder()->build();
$jsonArray = $gson->toNormalized($object);
$object = $gson->fromNormalized($jsonArray, Foo::class);

Documentation

Installation

This library requires PHP 7.1

composer require tebru/gson-php

Be sure and set up the annotation loader in one of your initial scripts.

\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader('class_exists');

License

This project is licensed under the MIT license. Please see the LICENSE file for more information.