Json.NET 合并多个 JSON 文件



我有一个 API 当前接收我推送到文件 (800KB-1MB( 的 JSON 调用(每个调用 1 个(,并且希望有一个每小时的任务,该任务获取过去一小时内的所有 JSON 文件并将它们合并到一个文件中,以便更好地进行每日/每月分析。

每个文件都由一组数据组成,因此采用 [ 对象 {属性: 值, ...] 的格式。 因此,我无法进行简单的串联,因为它将不再是有效的 JSON(也不添加逗号,然后文件将是集合的集合(。 我想保持尽可能低的内存占用,所以我正在查看以下示例,并将每个文件推送到流中(使用 JsonConvert.DeserializeObject(fileContent( 反序列化文件;但是,通过这样做,我最终也会得到一个集合集合。 我也尝试使用 JArray 而不是 JsonConvert,推送到 foreach 之外的列表,但提供相同的结果。 如果我将序列化调用移到 ForEach 之外,它确实有效;但是,我担心在内存中保留4-6GB的项目。

总之,我最终得到 [ [ 对象 {属性: 值, ... ],...[ 对象 {属性: 值, ... ]]其中我想要的输出是 [ 对象 {属性: 值 (文件1(, ...对象 {属性: 值 (文件N( ]。

        using (FileStream fs = File.Open(@"C:UsersPublicDocumentscombined.json", FileMode.CreateNew))
        {
            using (StreamWriter sw = new StreamWriter(fs))
            {
                using (JsonWriter jw = new JsonTextWriter(sw))
                {
                    jw.Formatting = Formatting.None;
                    JArray list = new JArray();
                    JsonSerializer serializer = new JsonSerializer();
                    foreach (IListBlobItem blob in blobContainer.ListBlobs(prefix: "SharePointBlobs/"))
                    {
                        if (blob.GetType() == typeof(CloudBlockBlob))
                        {
                            var blockBlob = (CloudBlockBlob)blob;
                            var content = blockBlob.DownloadText();
                            var deserialized = JArray.Parse(content);
                            //deserialized = JsonConvert.DeserializeObject(content);
                            list.Merge(deserialized);
                            serializer.Serialize(jw, list);
                        }
                        else
                        {
                            Console.WriteLine("Non-Block-Blob: " + blob.StorageUri);
                        }
                    }
                }
            }
        }

在这种情况下,为了保持较低的处理和内存占用,我想我会一个接一个地连接文件,即使它会导致技术上无效的 JSON。 若要稍后反序列化组合文件,可以利用 JsonTextReader 类上的 SupportMultipleContent 设置,并通过流处理对象集合,就好像它们是整个集合一样。 有关如何执行此操作的示例,请参阅此答案。

相关内容

  • 没有找到相关文章

最新更新