paysera / lib-object-wrapper

此包的最新版本(0.4.0)没有可用的许可证信息。

围绕JSON解码数据的包装器,可轻松获取结构化项

0.4.0 2023-04-28 07:29 UTC

This package is auto-updated.

Last update: 2024-08-28 10:13:50 UTC


README

此库提供类,可轻松从JSON解码的数据中获取结构化项。

为什么?

以便更容易、更快地

  • 检查正确的数据类型。这允许轻松使用PHP7静态类型提示;
  • 检查必需的键/项;
  • 为缺失的项提供默认值;
  • 提供有关数据在对象树中确切位置的信息,该位置的数据不符合您的要求。

用法

$jsonString = json_encode([
    // ...
]);
/** @var stdClass $jsonData */
$jsonData = json_decode($jsonString);

$data = new ObjectWrapper($jsonData);

// Use like an associative array if needed
foreach ($data as $key => $value) {
    var_dump(isset($data[$value]));
    var_dump($data[$value]);
}

var_dump($data['non_existing']);    // just null - no notice

var_dump($data->getRequired('required_key'));   // throws exception if missing

var_dump($data->getString('key_with_string'));  // throws exception if not string, defaults to null
var_dump($data->getString('key_with_string', 'default'));  // different default
var_dump($data->getRequiredString('key_with_string'));  // throws exception if missing or not string

var_dump(get_class($data->getRequiredObject('inner_data'))); // always another ObjectWrapper instance
var_dump(get_class($data->getObject('inner_data'))); // another ObjectWrapper instance or null

var_dump($data->getArrayOfString('keys'));    // array of strings
var_dump($data->getArrayOfOject('children')); // array of ObjectWrapper instances

try {
    $data->getRequiredObject('inner_data')->getArrayOfObject('list')[0]->getRequiredString('key');
} catch (MissingItemException $e) {
    echo $e->getMessage(); // Missing required key "inner_data.list.0.key"
    echo $e->getKey();     // inner_data.list.0.key
}

方法

  • $data[$key] - 使用数组访问器获取任何值,如果不可用则返回 null。如果值是对象,则返回 ObjectWrapper 实例;
  • getRequired。返回混合值,但检查它是否提供;
  • getRequiredBool。返回 bool
  • getBool。返回 boolnull
  • getRequiredFloat。返回 float。接受 int,但将其转换为 float
  • getFloat。返回 floatnull。接受 int,但将其转换为 float
  • getRequiredInt。返回 int
  • getInt。返回 intnull
  • getRequiredObject。返回另一个 ObjectWrapper 实例;
  • getObject。返回另一个 ObjectWrapper 实例或 null
  • getRequiredString。返回 string
  • getString。返回 stringnull
  • getArray。返回 array。如果没有提供项,则返回空数组,因此没有 getRequiredArray
  • getArrayOfBool。返回 array,所有项都是 bool(或它是空的);
  • getArrayOfFloat。返回 array,所有项都是 float(或它是空的);
  • getArrayOfInt。返回 array,所有项都是 int(或它是空的);
  • getArrayOfString。返回 array,所有项都是 string(或它是空的);
  • getArrayOfObject。返回 array,所有项都是 ObjectWrapper 实例(或它是空的)。
  • getDataAsArray。返回 array,所有项都是 array 或原始类型。
  • getOriginalData。返回 stdClass,构造函数传递的原始数据。

需要注意的一些事项

  • stdClass 用于对象 - 这是 json_decode 的默认设置。这是为了轻松检查数据是对象还是数组。例如,如果将空对象或空数组作为JSON传递并规范化到数组中,则无法检查原始数据类型;
  • null 值被视为未提供
    • 如果您提供 null 而期望某些类型(甚至是数组或对象),则不会抛出 InvalidItemTypeException
    • 即使您提供值但它是 null,它也会抛出 MissingItemException
  • 对象不能被修改 - 不支持设置或删除任何内容。