gpt4 book ai didi

php - 从PHP中的大json文件读取大数组

转载 作者:行者123 更新时间:2023-12-03 09:27:16 29 4
gpt4 key购买 nike

我知道我的问题在互联网上有很多答案,但是似乎我找不到很好的答案,所以我将尽力解释自己的想法,并希望能做到最好,
所以我想做的是读取一个大的json文件,该文件可能比此文件具有更复杂的结构“带有大数组的嵌套对象”,但举个简单的例子:

{
"data": {
"time": [
1,
2,
3,
4,
5,
...
],
"values": [
1,
2,
3,
4,
6,
...
]
}
}
这个文件可能是200M或更大,我正在使用 file_get_contents()json_decode()从文件中读取数据,
然后我将结果放在变量中并在时间上循环,并使用当前索引获取时间值,以从值数组中通过索引获取对应的值,然后将时间和值保存在数据库中,但这占用了太多的CPU和内存是他们这样做的更好方法
使用更好的功能,使用更好的json结构,或者比使用json更好的数据格式来执行此操作
我的代码:
$data = json_decode(file_get_contents(storage_path("test/ts/ts_big_data.json")), true);

foreach(data["time"] as $timeIndex => timeValue) {
saveInDataBase(timeValue, data["values"][timeIndex])
}
预先感谢您的任何帮助
更新06/29/2020:
我还有另一个更复杂的json结构示例
{
"data": {
"set_1": {
"sub_set_1": {
"info_1": {
"details_1": {
"data_1": [1,2,3,4,5,...],
"data_2": [1,2,3,4,5,...],
"data_3": [1,2,3,4,5,...],
"data_4": [1,2,3,4,5,...],
"data_5": 10254552
},
"details_2": [
[1,2,3,4,5,...],
[1,2,3,4,5,...],
[1,2,3,4,5,...],
]
},
"info_2": {
"details_1": {
"data_1": {
"arr_1": [1,2,3,4,5,...],
"arr_2": [1,2,3,4,5,...]
},
"data_2": {
"arr_1": [1,2,3,4,5,...],
"arr_2": [1,2,3,4,5,...]
},
"data_5": {
"text": "some text"
}
},
"details_2": [1,2,3,4,5,...]
}
}, ...
}, ...
}
}
文件大小可能约为500MB或更多,并且此json文件中的数组可能具有大约100MB的数据或更多。
我的问题是如何获得和平,并以最有效的方式在这些数据的节点之间进行导航,而这不会占用太多的RAM和CPU,我无法逐行读取文件,因为当我需要获得和平的数据时,我必须,
例如,python比php更适合于更有效地处理这种大数据吗?
请如果您可以提供详细的答案,我认为这对每一个希望用php来做这个大数据的人都会有很大的帮助。

最佳答案

JSON是一种很好的格式,并且是XML的更好替代方法。
最后,JSON几乎是一对一可转换为XML并可以反向转换。
大文件可能会变得更大,因此我们不想读取内存中的所有内容,也不想解析整个文件。我对XXL大小的JSON文件有相同的问题。
我认为问题不在于特定的编程语言,而在于格式的实现和细节。
我为您提供3种解决方案:

  • native PHP实现(首选)

  • 一个库 https://github.com/pcrov/JsonReader几乎与流式XMLReader一样快。例子:
    use pcrov\JsonReader\JsonReader;

    $reader = new JsonReader();
    $reader->open("data.json");

    while ($reader->read("type")) {
    echo $reader->value(), "\n";
    }
    $reader->close();
    该库不会将整个文件读入内存或解析所有行。它是逐步遍历JSON对象树的命令。
  • 放手格式(缺点:多次转换)

  • 将文件预处理为其他格式,例如XML或CSV。
    有非常轻量的nodejs库,例如 https://www.npmjs.com/package/json2csv从JSON到CSV。
  • 使用一些NoSQL DB (缺点:要安装和维护的其他复杂软件)

  • 例如Redis或CouchDB( import json file to couch db-)

    关于php - 从PHP中的大json文件读取大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62579243/

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