当前位置: 首页 > 面试题库 >

用PHP处理大型JSON文件

严烨
2023-03-14
问题内容

我正在尝试处理较大的(可能多达200M)JSON文件。文件的结构基本上是对象数组。

因此,遵循以下原则:

[
  {"property":"value", "property2":"value2"},
  {"prop":"val"},
  ...
  {"foo":"bar"}
]

每个对象都具有任意属性,不必与数组中的其他对象共享它们(例如,具有相同的属性)。

我想对数组中的每个对象进行处理,并且由于文件可能很大,因此无法将整个文件内容都包含在内存中,无法解码JSON并遍历PHP数组。

因此,理想情况下,我想读取文件,为每个对象获取足够的信息并进行处理。如果存在类似的JSON库,则使用SAX类型的方法就可以了。

关于如何最好地解决此问题的任何建议?


问题答案:

我决定研究基于事件的解析器。尚未完成,当我发布令人满意的版本时,它将使用指向我工作的链接来编辑问题。

编辑:

我终于找到了我满意的解析器版本。在GitHub上可用:

https://github.com/kuma-giyomu/JSONParser

可能还有一些改进的余地,欢迎您提供反馈。



 类似资料:
  • 问题内容: 我有一个很大的xml文件,其中包含许多子元素。我希望能够运行一些xpath查询。我尝试在Java中使用vtd- xml,但有时会出现内存不足错误,因为xml太大,无法容纳到内存中。是否有替代方法来处理如此大的xml。 问题答案: 尝试http://code.google.com/p/jlibs/wiki/XMLDog 它使用sax执行xpaths,而无需创建xml文档的内存表示形式。

  • 问题内容: 我有相对较小的对象的巨大(〜7GB)json数组。 有没有一种相对简单的方法可以过滤这些对象而无需将整个文件加载到内存中? --stream 选项看起来合适,但我不知道如何将[path,value]的流折叠到原始对象。 问题答案: jq 1.5具有流解析器。jq FAQ提供了一个示例,该示例如何将JSON对象的顶级数组转换为其元素流: 这可能足以满足您的目的,但是值得注意的是setpa

  • 我使用axios从API获取数据,然后使用节点中的数据。js应用程序。数据是由300个对象组成的数组,如下所示: 获取此对象数组后,我需要转换每个对象:用新的键替换其键,并将一些值转换为适当的数据类型(字符串到浮点): 现在我只使用For循环,并在每次迭代中转换每个对象的键和值。但是像这样的物体将会有成千上万。它将是处理这些数据的工人。在节点中处理它们的最佳方式是什么。js? 我将使用一些现成的队

  • 问题内容: 我需要构建一个函数来处理大型CSV文件,以便在bluebird.map()调用中使用。考虑到文件的潜在大小,我想使用流媒体。 此函数应接受一个流(一个CSV文件)和一个函数(处理该流中的块),并在读取文件到末尾(已解决)或错误(已拒绝)时返回promise。 所以,我开始: 现在,我有两个相互关联的问题: 我需要限制正在处理的实际数据量,以免造成内存压力。 作为参数传递的函数通常将是异

  • 我正在处理非常大的文件,并使用Spring集成来处理它们。我想知道使用Spring集成和提供的DSL处理这些问题的最佳和最有效的方法是什么。我有一个测试CSV文件,它有大约30K条记录,我正在使用filespliter组件将每一行读入内存,然后根据分隔符再次拆分,以获得我需要的列。 下面的代码段。

  • 问题内容: 这是deepbit.net返回给我的比特币矿工的json。我正在尝试访问worker数组并循环进行以打印myemail@gmail.com worker的统计信息。我可以访问Confirmed_reward,hashrate,ipa和payout_history,但是在格式化和输出worker数组时遇到问题。 谢谢您的帮助 :) 问题答案: 我假设您已经解码了使用json_decode