phpgt/json

结构化、类型安全、不可变的 JSON 对象。

维护者

详细信息

github.com/PhpGt/Json

源代码

问题

资助包维护!
PhpGt

v1.2.1 2023-07-13 13:20 UTC

README

建立在 PHP.Gt/DataObject 之上,此存储库增加了针对 JSON 的特定兼容性。主要用途将通过 JsonObjectBuilder 类实现,该类可用于从 JSON 字符串或解码后的 JSON 对象(来自 json_decode)构建 JsonObject 类型。

使用这些类表示解码的 JSON 数据的目的是提供对封装数据的类型安全、不可变接口。

Build status Code quality Code coverage Current version PHP.Gt/Json documentation

抽象的 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 - 原始值的表示,进一步细分为类型 JsonArrayPrimitiveJsonBoolPrimitiveJsonFloatPrimitiveJsonIntPrimitiveJsonNullPrimitiveJsonStringPrimitive

用法示例

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