在 PHP 中高效处理大型 JSON 文件
处理较大大小(最多 200MB)的 JSON 文件时,将整个文件读入将内存作为 PHP 数组变得不切实际。一种有效的方法是利用流式 JSON 解析技术来避免消耗过多的内存。
JsonReader:用于 PHP 的流式 JSON Pull 解析器
pcrov/JsonReader 库提供了PHP 7 的流式 JSON 拉解析器。与基于事件的解析器不同,JsonReader 提供了一个简单的 API,允许开发人员沿着 JSON 流移动并根据需要检索数据。这种方法可以更好地控制解析过程并最大限度地减少内存消耗。
示例:将对象作为整个单元读取
$reader = new JsonReader(); $reader->open("data.json"); $reader->read(); // Outer array $depth = $reader->depth(); $reader->read(); // First object while ($reader->next() && $reader->depth() > $depth) { print_r($reader->value()); // Process each object } $reader->close();
示例:读取属性单独
$reader->json($json); while ($reader->read()) { if ($reader->name() !== null) { echo "{$reader->name()}: {$reader->value()}\n"; } } $reader->close();
示例:读取具有重复名称的属性
$json = '[{"property":"value", "property2":"value2"}, {"foo":"foo", "foo":"bar"}]'; $reader = new JsonReader(); $reader->json($json); while ($reader->read("foo")) { echo "{$reader->name()}: {$reader->value()}\n"; } $reader->close();
其他选项
选择最佳的 JSON 解析方法取决于文件的结构和处理 要求。 JsonReader 还支持从给定深度或通过正则表达式读取属性,为复杂数据结构提供进一步的灵活性。
以上是如何在 PHP 中高效处理大型 JSON 文件而不耗尽内存?的详细内容。更多信息请关注PHP中文网其他相关文章!