我正在开发一个cron脚本,它可以访问API,接收JSON文件(大量对象)并将其存储在本地.完成后,另一个脚本需要解析下载的JSON文件并将每个对象插入MySQL数据库.
我目前使用file_get_contents()
沿json_decode()
.在尝试处理之前,这将尝试将整个文件读入内存.除了我的JSON文件通常在250MB-1GB +范围内之外,这没什么问题.我知道我可以增加我的PHP内存限制,但这似乎不是我心中最好的答案.我知道我可以逐行运行fopen()
并fgets()
读取文件,但我需要读取每个json对象的文件.
有没有办法在每个对象的文件中读取,还是有另一种类似的方法?
试试这个lib https://github.com/shevron/ext-jsonreader
PHP附带的现有ext/json非常方便且易于使用 - 但是在处理大量JSON数据时效率很低,因为它需要将整个JSON数据读入内存(例如使用file_get_contents())然后一次将其转换为PHP变量 - 对于大型数据集,这会占用大量内存.
JSONReader专为提高内存效率而设计 - 它可以在流上运行,可以从任何PHP流中读取JSON数据,而无需将整个数据加载到内存中.它还允许开发人员从JSON流中提取特定值,而无需解码并将所有数据加载到内存中.
这实际上取决于json文件包含的内容.
如果打开文件一次进入内存不是一个选项,你唯一的另一个选择是fopen/fgets.
逐行读取是可能的,如果这些json对象具有一致的结构,您可以轻松地检测文件中的json对象何时开始和结束.
收集整个对象后,将其插入到数据库中,然后继续下一个.
没有更多的东西.检测json对象的开始和结束的算法可能会因为你的数据源而变得复杂,但我之前用更复杂的结构(xml)做了类似的事情并且它运行正常.
归档时间: |
|
查看次数: |
29942 次 |
最近记录: |