我正在尝试解码大型 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/