JSON Parser - це аналізатор нульових залежностей для читання великого JSON з будь-якого джерела ефективним способом пам'яті. Ви можете прочитати JSON з будь-якого джерела, такого як рядок, URL-адреса тощо, і перебирати його так:Якщо ви не хочете використовувати foreach
цей аналізатор, він також поставляється з методомtraverse
, який виглядає наступним чином:
// a source is anything that can provide a JSON, in this case an endpoint
$source = 'https://randomuser.me/api/1.4?seed=json-parser&results=5';
foreach (new JsonParser($source) as $key => $value) {
// instead of loading the whole JSON, we keep in memory only one key and value at a time
}
JsonParser::parse($source)->traverse(function (mixed $value, string|int $key, JsonParser $parser) {
// lazily load one key and value at a time; we can also access the parser if needed
});
Наведені вище приклади демонструють використання URL-адреси для обробки JSON, але пакет підтримує кілька джерел даних. На момент написання статті readme містить такі джерела:
- рядки, наприклад {"foo":"bar"}
- iterables, тобто масиви або екземпляри Traversable
- шляхи до файлів, наприклад /path/to/large.json
- ресурси, наприклад, потоки
- URL-адреси кінцевих точок API, наприклад https://endpoint.json або будь-який екземпляр інтерфейсу Psr\Http\Message\UriInterface
- запити PSR-7, тобто будь-який екземпляр Psr\Http\Message\RequestInterface
- Повідомлення PSR-7, тобто будь-який екземпляр Psr\Http\Message\MessageInterface
- потоки PSR-7, тобто будь-який екземпляр Psr\Http\Message\StreamInterface
- HTTP-клієнтські запити Laravel, тобто будь-який екземпляр Illuminate\Http\Client\Request
- Відповіді клієнта Laravel HTTP, тобто будь-який екземпляр Illuminate\Http\Client\Response
- користувацькі джерела, тобто будь-який екземпляр Cerbero\JsonParser\Sources\Source
Ще однією дивовижною особливістю цієї бібліотеки, яку я хочу відзначити, є покажчики, які корисні для вилучення лише певних піддерев із великого набору даних JSON:Цей пакунок має багато інших функцій, які мені все ще потрібно згадати,
// Select the first gender result
$json = JsonParser::parse($source)->pointer('/results/0/gender');
foreach ($json as $key => $value) {
// 1st and only iteration: $key === 'gender', $value === 'female'
}
// Get all gender results
$json = JsonParser::parse($source)->pointer('/results/-/gender');
// ...
які вам слід перевірити! Наприклад, він має API прогресу для відстеження прогресу аналізу (тобто відсоток завершення, оброблені байти тощо). Ознайомтеся з цим пакетом, отримайте повні інструкції зі встановлення та перегляньте вихідний код на GitHub!