timostamm/json-parser

简单的API读取JSON对象。不是序列化器。

v1.1.0 2023-04-17 09:58 UTC

This package is auto-updated.

Last update: 2024-09-17 17:00:44 UTC


README

build Packagist PHP Version GitHub tag License

简单的API读取JSON对象。不是序列化器。

没有序列化器可用?厌倦了编写如下冗长的代码?

// json: '{"name":"hello", "tagIds":[1,2,3], "assetId": 559}'

$payload = json_decode($request->getContent(), true);
if (!is_array($payload)) {
    throw new BadRequestHttpException('Unable to parse JSON from request body.');
}

if (!array_key_exists('name', $payload)) {
    throw new \OutOfBoundsException();
}
if (!is_string($payload['name'])) {
    throw new \UnexpectedValueException();
}
$name = $payload['name'];

if (!array_key_exists('tagIds', $payload)) {
    throw new \OutOfBoundsException();
}
if (!is_array($payload['tagIds'])) {
    throw new \UnexpectedValueException();
}
$tagIds = $payload['tagIds'];

if (!array_key_exists('assetId', $payload)) {
    throw new \OutOfBoundsException();
}
if (!is_int($payload['assetId'])) {
    throw new \UnexpectedValueException();
}
$assetId = $payload['assetId'];

使用本库提供的稍微不那么糟糕的API

// json: '{"name":"hello", "tagIds":[1,2,3], "assetId": 559}'

$payload = JsonObject::parseFromString($request->getContent());
$name = $payload->getString('name');
$tagIds = $payload->getIntArray('tagIds');
$assetId = $payload->getInt('assetId');

嵌套对象也适用

// json: '{ "type":"parent", "children":[{"name":"peter"}] }'

$children = $payload->getArray('children');
$firstChild = $children->getObject(0);

// raises exception "Expected int value at children[0].age, but property is undefined"
$firstChild->getInt('age');