• Час читання ~2 хв
  • 14.07.2023

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!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297