PHP | json_decode 巨大的 json 文件

标签 php arrays json

我正在尝试解码大型 json 文件 222mb 文件。

我知道我不能通过使用 file_get_contents() 直接使用 json_decode 来读取整个文件并解码整个字符串,因为它会消耗大量内存并且不会返回任何内容(这是它目前所做的。)

所以我去尝试图书馆, 我最近试过的是JSONParser . 它的作用是在 json 数组中一个一个地读取对象。

但是由于那里缺少文档,我想在这里问一下是否有人使用过这个库。

这是来自github的示例测试代码

// initialise the parser object
$parser = new JSONParser();

// sets the callbacks
$parser->setArrayHandlers('arrayStart', 'arrayEnd');
$parser->setObjectHandlers('objStart', 'objEnd');
$parser->setPropertyHandler('property');
$parser->setScalarHandler('scalar');
/*
echo "Parsing top level object document...\n";
// parse the document
$parser->parseDocument(__DIR__ . '/data.json');*/

$parser->initialise();

//echo "Parsing top level array document...\n";
// parse the top level array

$parser->parseDocument(__DIR__ . '/array.json');

如何使用循环并将对象保存在 php 变量中,我们可以轻松地将其解码为 php 数组以供进一步使用。

这将花费一些时间,因为它会对 json 数组的所有对象一个一个地执行此操作,但问题是如何使用此库对其进行循环,或者是否没有这样的选项。

或者对于这种工作还有其他更好的选择或库吗?

最佳答案

另一种选择是使用 halaxa/json-machine .

在 JSON 上迭代的用法与 json_decode 的情况相同,但无论文件有多大,它都不会达到内存限制。无需执行任何操作,只需执行您的 foreach

例子:

$users = \JsonMachine\JsonMachine::fromFile('500MB-users.json');

foreach ($users as $id => $user) {
    // process $user as usual
}

有关详细信息,请参阅 github 自述文件。

关于PHP | json_decode 巨大的 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887846/

相关文章:

php - 了解 ajax 画廊和类别

python - C# Unity - 从统一的相机中提取像素数组并在 python 中显示

java - EclipseLink MOXy 动态对象图中的 ALLOW_UNQUOTED_FIELD_NAMES JSON

javascript - 我将如何检索 JSON 编码的 PHP 回显到 AJAX 脚本?

php - 使用 PHP 中的 json_encode 时,JQuery $.each 循环会重新排序我的数组

php - 从不同形式的表更新数据库中的表

javascript - 将当前分数写入 MySQL 数据库的 PHP 代码

javascript - 在将 .ticks() 应用于我的 x 比例时,如何解决 d3 js 中的此错误

arrays - 将 CSV 文件的内容加载到数组而不打开文件

java - Spring MappingJacksonJsonView,如何告诉使用它而不是 JSP View ?