Другой вариант - использовать потоковый анализатор JSON .
Использование парсера стримеров будет полезно, если вы хотите обойти граф промежуточных объектов, созданный PHP при использовании json_decode
. Например, когда вы получили большой JSON-документ и проблема с памятью, вы можете вывести XML с XMLWriter
напрямую во время чтения документа с помощью потокового анализатора.
Один пример будет https://github.com/salsify/jsonstreamingparser
$writer = new XMLWriter;
$xml->openURI('file.xml');
$listener = new JSON2XML($writer); // you need to write the JSON2XML listener
$stream = fopen('doc.json', 'r');
try {
$parser = new JsonStreamingParser_Parser($stream, $listener);
$parser->parse();
} catch (Exception $e) {
fclose($stream);
throw $e;
}
В JSON2XML Listener потребуется реализовать интерфейс Listener :
interface JsonStreamingParser_Listener
{
public function start_document();
public function end_document();
public function start_object();
public function end_object();
public function start_array();
public function end_array();
public function key($key);
public function value($value);
}
Во время выполнения слушатель будет получать различные события от анализатора, например, когда анализатор находит объект, он отправляет данные в метод start_object()
. Когда он находит массив, он запускает start_array()
и так далее. В этих методах вы затем делегировали бы значения соответствующим методам в XMLWriter
, например, start_element()
и т. Д.
Отказ от ответственности: Я не связан с автором, и я не использовал инструмент раньше. Я выбрал эту библиотеку, потому что API выглядел достаточно простым, чтобы проиллюстрировать, как использовать анализатор JSON на основе событий.