【发布时间】:2016-10-19 15:53:42
【问题描述】:
我正在尝试解码大型 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 数组的所有对象一一进行,但问题是如何使用这个库循环它,或者没有这样的选项。
或者还有其他更好的选择或库来完成这项工作吗?
【问题讨论】:
-
你不应该为你想要的而使用循环。解析器只会发出回调应该处理的事件,并对数据做他们想要/需要做的任何事情。或者有github.com/salsify/jsonstreamingparser。不过,我不能保证任何一个图书馆,所以你必须自己检查一下。