Built on top of PHP.Gt/DataObject, this repository adds JSON-specific compatibility. The main usage will be via the JsonObjectBuilder
class that can be used to build a type of JsonObject
from a JSON string or decoded JSON object (from json_decode
).
The purpose of using these classes to represent decoded JSON data is to provide a type-safe, immutable interface to the enclosed data.
The abstract JsonObject
class extends the DataObject
base class to represent the root element of a JSON object. In JSON, this may not necessarily be a key-value-pair object.
The following JSON strings can all be successfully decoded:
{"type": "key-value-pair"}
- a typical key-value-pair object[{"name": "first"}, {"name": "second"}
- an array of objects0
- an integer1.05
- a floating pointfalse
- a boolean"Today is going to be a good day"
- a stringnull
- a null
Because of this, the base DataObject
would be unable to represent the different types of scalar value in a type-safe way. The JsonObjectBuilder
class returns a new instance of the abstract JsonObject
class which is one of the following types:
JsonKvpObject
- identical features toDataObject
with type-safe getters for its keysJsonPrimitive
- a representation of the primitive value, further broken down into typesJsonArrayPrimitive
,JsonBoolPrimitive
,JsonFloatPrimitive
,JsonIntPrimitive
,JsonNullPrimitive
andJsonStringPrimitive
.
use Gt\Json\JsonObjectBuilder;
use Gt\Json\JsonKvpObject;
use Gt\Json\JsonPrimitive\JsonPrimitive;
$response = file_get_contents("https://example.com/details.json");
$builder = new JsonObjectBuilder();
$jsonObject = $builder->fromJsonString($response);
if($jsonObject instanceof JsonKvpObject) {
$id = $jsonObject->getInt("id");
}
elseif($jsonObject instanceof JsonPrimitive) {
$id = $jsonObject->getPrimitiveValue();
}
echo "Requested ID is: $id";
Check out the PHP implementation of the Fetch API that uses this library to work with JSON endpoints asynchronously.