phpgt / json
结构化、类型安全、不可变 JSON 对象。
v1.2.1
2023-07-13 13:20 UTC
Requires
- php: >=8.1
- ext-json: *
- phpgt/dataobject: ^1.0.7
Requires (Dev)
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.1
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-13 15:48:42 UTC
README
基于 PHP.Gt/DataObject 构建,此仓库添加了针对 JSON 的特定兼容性。主要用法将通过 JsonObjectBuilder
类实现,该类可以从 JSON 字符串或解码后的 JSON 对象(来自 json_decode
)构建一种 JsonObject
类型。
使用这些类表示解码后的 JSON 数据的目的是提供对封装数据的类型安全、不可变接口。
抽象的 JsonObject
类扩展了 DataObject
基类,用于表示 JSON 对象的根元素。在 JSON 中,这不一定是一个键值对对象。
以下 JSON 字符串都可以成功解码
{"type": "key-value-pair"}
- 一个典型的键值对对象[{"name": "first"}, {"name": "second"}]
- 对象数组0
- 一个整数1.05
- 一个浮点数false
- 一个布尔值"Today is going to be a good day"
- 一个字符串null
- 一个 null
因此,基类 DataObject
无法以类型安全的方式表示不同类型的标量值。 JsonObjectBuilder
类返回抽象 JsonObject
类的新实例,该实例是以下类型之一
JsonKvpObject
- 与DataObject
功能相同,具有类型安全的键获取器JsonPrimitive
- 原始值的表示,进一步细分为类型JsonArrayPrimitive
、JsonBoolPrimitive
、JsonFloatPrimitive
、JsonIntPrimitive
、JsonNullPrimitive
和JsonStringPrimitive
。
使用示例
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";
Fetch API
查看使用此库以异步方式处理 JSON 端点的 PHP Fetch API 实现。