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
- 空值
因此,基本 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";
获取 API
查看使用此库异步处理 JSON 端点的 PHP 实现的 Fetch API。