donatascn/lib-object-wrapper

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

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

0.2.3 2021-12-27 14:18 UTC

This package is auto-updated.

Last update: 2024-09-09 17:48:23 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
  • 对象不能被修改 - 不支持设置或删除任何内容。