remorhaz/php-json-data

JSON 数据访问器

v0.7.0 2024-02-17 12:52 UTC

This package is auto-updated.

Last update: 2024-09-17 14:22:27 UTC


README

Latest Stable Version Build Status Scrutinizer Code Quality codecov Total Downloads Mutation testing badge License

此库为处理 JSON 文档提供基础设施。

要求

  • PHP 8.1 或更高版本。
  • 国际化函数 (ext-intl) - 用于比较 Unicode 字符串。
  • JSON 扩展 (ext-json) - 用于编码和解码 JSON 文档。

节点值

ValueInterface 可以用来表示 JSON 文档或其部分。存在一系列派生接口,提供对类型值的访问

  • ScalarValueInterface
  • ArrayValueInterface
  • ObjectValueInterface

NodeValueInterface 包含有关值在文档中路径的信息,因此可以用来表示实际存在于某些 JSON 文档中的值。没有路径的计算值应实现基本的 ValueInterface

节点值工厂

这种类型的对象旨在从某些源创建节点值。此库包括两种节点值工厂的实现

  • DecodedJson\NodeValueFactory 从原始 PHP 值(由 json_decode() 函数产生或手动创建)创建节点值。
  • EncodedJson\NodeValueFactory 直接从编码的 JSON 字符串创建节点值。

示例

<?php

use Remorhaz\JSON\Data\Value\DecodedJson;
use Remorhaz\JSON\Data\Value\EncodedJson;

// Both values represent same JSON document:
$value1 = EncodedJson\NodeValueFactory::create()->createValue('{"a":"b"}');
$value2 = DecodedJson\NodeValueFactory::create()->createValue((object) ['a' => 'b']);

事件流

JSON 文档可以表示为事件流。这些事件实现了 EventInterface 的派生类。这些事件可以由任何自定义 JSON 解析器发出,但此库还实现了标准的 ValueWalker 对象,该对象可以将任何 NodeValueInterface 转换为事件流。

值遍历器还可以使用 变异 来改变事件。没有标准变异,您必须自己实现 MutationInterface

您还可以使用 EventDecoder 对象将事件流转换回 NodeValueInterface

值导出器

库包含一系列 ValueExporterInterface 的实现,允许将 ValueInterface 导出为其他表示形式

  • ValueEncoder 将值转换为 JSON 编码的字符串。
  • ValueDecoder 将值转换为原始 PHP 值。

比较器

库包含一系列 ComparatorInterface 的实现,提供了一种简单的方法来比较/排序 JSON 文档

  • EqualValueComparator 检查 JSON 文档是否相等。请注意,具有相同属性但顺序不同的对象被认为是相等的。
  • GreaterValueComparator 比较数字和字符串。
  • ContainsValueComparator 检查 JSON 文档是否相等或包含。包含的对象允许在任何递归级别具有额外的属性。

许可证

此库根据 MIT 许可证许可。有关更多信息,请参阅 LICENSE