C# 写入换行分隔的Json

C# 写入换行分隔的Json,c#,json,json.net,google-bigquery,C#,Json,Json.net,Google Bigquery,我正在研究如何使用JSON.Net编写新行分隔的JSON。我需要这样做才能将数据导出到Google BigQuery- 目前,我发现唯一的方法是循环我的集合,一次一个地序列化每个对象,但我想知道是否有更好的方法 我遇到了这个问题,但答案只解释了如何读取换行符分隔的Json,而不是如何编写它没有换行符分隔的Json。您需要的是将JSON对象存储在单独的行中。这被许多大数据和事件处理产品所使用,包括Azure Stream Analytics、Hive、Google的大查询等 使用这种存储方法是因为

我正在研究如何使用JSON.Net编写新行分隔的JSON。我需要这样做才能将数据导出到Google BigQuery-

目前,我发现唯一的方法是循环我的集合,一次一个地序列化每个对象,但我想知道是否有更好的方法


我遇到了这个问题,但答案只解释了如何读取换行符分隔的Json,而不是如何编写它

没有换行符分隔的Json。您需要的是将JSON对象存储在单独的行中。这被许多大数据和事件处理产品所使用,包括Azure Stream Analytics、Hive、Google的大查询等

使用这种存储方法是因为它使并行处理变得更加容易:

  • 在读取时,单个文件可以很容易地按行进行分区,而无需实际解析整个文本,并且可以分配给不同的线程或工作线程
  • 行可以独立处理,无需等待整个文本被解析。这使得您可以利用异步操作和/或数据流来并发读取和解析
  • 写入时,多个线程可以将数据写入不同的文件,然后可以将所有文件合并到一个文件中。即使在写入单个磁盘时,操作系统和磁盘缓冲以及操作开销意味着并发发送ind X操作可以比顺序执行X操作更快地完成
  • 每个工作线程/线程都可以直接写入新记录。解析器需要访问所有记录才能生成文件
出于这个原因,使用解析器生成这样的文件不是一个好主意,即使解析器支持它。单线程实现速度太慢,会迫使您在写入记录之前收集所有记录


为了提高性能,您可以写入多个文件,最好是在单独的磁盘上,并在最后将所有文件合并为一个文件。您还可以在生成每个记录时将其写入,而不是在写入之前等待将所有记录加载到内存中

没有换行符分隔的JSON。您需要的是将JSON对象存储在单独的行中。这被许多大数据和事件处理产品所使用,包括Azure Stream Analytics、Hive、Google的大查询等

使用这种存储方法是因为它使并行处理变得更加容易:

  • 在读取时,单个文件可以很容易地按行进行分区,而无需实际解析整个文本,并且可以分配给不同的线程或工作线程
  • 行可以独立处理,无需等待整个文本被解析。这使得您可以利用异步操作和/或数据流来并发读取和解析
  • 写入时,多个线程可以将数据写入不同的文件,然后可以将所有文件合并到一个文件中。即使在写入单个磁盘时,操作系统和磁盘缓冲以及操作开销意味着并发发送ind X操作可以比顺序执行X操作更快地完成
  • 每个工作线程/线程都可以直接写入新记录。解析器需要访问所有记录才能生成文件
出于这个原因,使用解析器生成这样的文件不是一个好主意,即使解析器支持它。单线程实现速度太慢,会迫使您在写入记录之前收集所有记录



为了提高性能,您可以写入多个文件,最好是在单独的磁盘上,并在最后将所有文件合并为一个文件。您还可以在生成每个记录时将其写入,而不是在写入之前等待将所有记录加载到内存中

如果您有当前可用的代码,那么您的要求是什么?您希望帮助解决的具体问题是什么?@dbc因为我想知道是否有更好的方法。我想知道是否有一种方法可以将我的集合传递给Json序列化程序,并且它可以按照我需要的方式格式化Json。@JonClarke想知道您是否能够将列表格式化/保存为新行分隔的Json?到目前为止,我们也在做同样的事情——将每个对象循环并序列化到一个C#对象。@projectzerotohero是的,我仍在用同样的方法,我还没有找到更好的方法来做这件事。如果你有目前可用的代码,那么你在问什么?您希望帮助解决的具体问题是什么?@dbc因为我想知道是否有更好的方法。我想知道是否有一种方法可以将我的集合传递给Json序列化程序,并且它可以按照我需要的方式格式化Json。@JonClarke想知道您是否能够将列表格式化/保存为新行分隔的Json?到目前为止,我们也在做同样的事情——将每个对象循环并序列化到一个C#对象。@projectzerotohero是的,我仍在以同样的方式进行操作,我还没有找到更好的方法来完成它。这里有一种称为完全以换行符分隔的JSON的格式:@Koterpillar不,这只是对非JSON的东西的非正式名称。它是由换行符分隔的JSON片段,用于上述原因。您链接到的Github repo是在人们开始使用换行符很久之后创建的。提到的唯一库是作者自己的,从未更新过。这不是一个格式的网站,这是一个失败的公关stunt@Koterpillar而法律上的“规范”基本上是无用的。它只是与实际标准的链接。它所说的只是“使用换行符作为分隔符”。但这不是我们所用的。除了分隔整个记录外,不应使用换行符。它可能不是IETF标准,也可能没有大量的追随者,但它确实存在。看起来至少有几个库是由不同的人编写的。我们在生产中使用了其中一种格式,它是稳定的。@Koterpillar相反,这种格式非常常见,u