Найти в Дзене
Laravel Topsite Web

PHP JSON Parser — для чтение больших JSON из любого источника

JSON Parser — это парсер с нулевыми зависимостей для чтения большого JSON из любого источника эффективным способом. Вы можете читать JSON из любого источника, такого как строка, URL-адрес и т. д., и проходить через него следующим образом: // source — это все, что может предоставить JSON $source = 'https://randomuser.me/api/1.4?seed=json-parser&results=5'; foreach (new JsonParser($source) as $key => $value) { // вместо того, чтобы загружать весь JSON целиком, мы храним в памяти только один ключ и значение одновременно } Если вы не хотите использовать foreach, этот синтаксический анализатор также поставляется с методом обхода, который выглядит следующим образом: JsonParser::parse($source)->traverse(function (mixed $value, string|int $key, JsonParser $parser) { // лениво загружайте по одному ключу и значению за раз при необходимости мы также можем получить доступ к синтаксическому анализатору }); Приведенные выше примеры демонстрируют использование URL-адреса для обработки JSON, но пакет

JSON Parser — это парсер с нулевыми зависимостей для чтения большого JSON из любого источника эффективным способом. Вы можете читать JSON из любого источника, такого как строка, URL-адрес и т. д., и проходить через него следующим образом:

// source — это все, что может предоставить JSON
$source = 'https://randomuser.me/api/1.4?seed=json-parser&results=5';
foreach (new JsonParser($source) as $key => $value) {
// вместо того, чтобы загружать весь JSON целиком, мы храним в памяти только один ключ и значение одновременно
}

Если вы не хотите использовать foreach, этот синтаксический анализатор также поставляется с методом обхода, который выглядит следующим образом:

JsonParser::parse($source)->traverse(function (mixed $value, string|int $key, JsonParser $parser) {
// лениво загружайте по одному ключу и значению за раз при необходимости мы также можем получить доступ к синтаксическому анализатору
});

Приведенные выше примеры демонстрируют использование URL-адреса для обработки JSON, но пакет поддерживает несколько источников данных. На момент написания статьи в readme перечислены следующие источники:

  • strings — например {"foo":"bar"}
  • iterables — массивы или экземпляры Traversable
  • file paths— например /path/to/large.json
  • resources — например потоки
  • 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
  • Ответы HTTP-клиента Laravel — любой экземпляр Illuminate\Http\Client\Response
  • Пользовательские источники — любой экземпляр Cerbero\JsonParser\Sources\Source

Еще одна удивительная особенность этой библиотеки, которую я хочу отметить — это указатели, которые полезны для извлечения только определенных поддеревьев из большого набора данных JSON:

// Выберите первый результат
$json = JsonParser::parse($source)->pointer('/results/0/gender');
foreach ($json as $key => $value) {
// 1-я и единственная итерация: $key === 'gender', $value === 'female'
}
// Получите все результаты
$json = JsonParser::parse($source)->pointer('/results/-/gender');
// ...

В этом пакете есть много других функций, которые я все еще должен упомянуть, что вы должны проверить! Например, у него есть API прогресса для отслеживания прогресса синтаксического анализа (процент завершения, обработанных байтов). Ознакомьтесь с этим пакетом, получите полные инструкции по установке и просмотрите исходный код на GitHub!