如何处理大型半结构化json文件

时间:2020-03-26 12:02:15

标签: c# json stream

我必须处理包含半结构化数据的大型JSON文件。例如

{
   stream: [
   {
      datastream: [
         ...
      ],
      schema: {
         name: "",
         version: ""
      }
   }, 
   {
      datastream: [
         ...
      ],
      schema: {
         name: "",
         version: ""
      }
   }]
}

我希望json文件包含一个具有“流”属性的对象,该对象是具有“数据流”和“架构”属性的对象的集合。 “数据流”属性可以包含数千个具有任意属性的对象。我实际上需要做的是处理“数据流”集合中的每个元素,然后将它们发送到另一个系统。另一个限制是,当我发送“数据流”元素时,我需要与它们一起发送相应“模式”的一些属性。

当前方法依赖于读取整个文件并将内容反序列化为内存中的对象,然后进行处理。在文件达到一定大小之前,该方法可以正常工作。目前,当文件超过300-400Mb时,它会因OutOfMemoryException而开始失败。我还必须处理超过1Gb的文件。解决此问题的最佳方法是什么?我当前的尝试是使用(Json.NET)中的JsonTextReader并一次处理一个令牌的json文件。就内存消耗而言,这很好。只是为了使这种方法更清晰,我在内存中没有文件的全部内容。我最多希望具有当前的“数据流”元素/条目以及“模式”。我使用这种方法面临的当前问题是,如果我想在将“数据流”元素转发到另一个系统之前对其进行充实,则它依赖于“数据流”之前出现的“模式”元素。这有道理吗?最好的方法是什么?

0 个答案:

没有答案