gpt4 book ai didi

PHP | json_decode 巨大的 json 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:48 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com