JSON Parser to parser ściągający o zerowej zależności, który odczytuje duży plik JSON z dowolnego źródła w sposób wydajny pod względem pamięci. Możesz odczytać JSON z dowolnego źródła, takiego jak ciąg znaków, adres URL itp., i iterować go w następujący sposób:Jeśli nie chcesz używać foreach
tego parsera jest również wyposażony w metodętraverse
, która wygląda następująco:
// 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
});
Powyższe przykłady pokazują użycie adresu URL do przetwarzania JSON, ale pakiet obsługuje kilka źródeł danych. W chwili pisania tego tekstu plik readme zawiera następujące źródła:
- ciągi znaków, np. {"foo":"bar"}
- iterables, tj. tablice lub instancje Traversable
- ścieżki plików, np. /ścieżka/do/large.json
- zasoby, np. strumienie
- Adresy URL punktów końcowych interfejsu API, np. https://endpoint.json lub dowolne wystąpienie Psr\Http\Message\UriInterface
- Żądania PSR-7, tj. dowolne wystąpienie Psr\Http\Message\RequestInterface
- Komunikaty PSR-7, tj. dowolne wystąpienie Psr\Http\Message\MessageInterface
- Strumienie PSR-7, tj. dowolna instancja Psr\Http\Message\StreamInterface
- Żądania klienta HTTP Laravel, tj. dowolne wystąpienie Illuminate\Http\Client\Request
- Odpowiedzi klienta HTTP Laravel, tj. dowolne wystąpienie Illuminate\Http\Client\Response
- źródła zdefiniowane przez użytkownika, tj. dowolne wystąpienie Cerbero\JsonParser\Sources\Source
Kolejną niesamowitą cechą tej biblioteki, na którą chcę zwrócić uwagę, są wskaźniki, które są przydatne do wyodrębniania tylko określonych poddrzew z dużego zestawu danych JSON: Ten pakiet ma wiele innych funkcji,
// 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');
// ...
o których wciąż muszę wspomnieć, że powinieneś sprawdzić! Na przykład ma interfejs API postępu do śledzenia postępu analizowania (tj. Procent ukończenia, przetworzone bajty itp.). Sprawdź ten pakiet, uzyskaj pełne instrukcje instalacji i wyświetl kod źródłowy na GitHub!