2

使用 C#:

我在文件系统的嵌套文件夹中有数百个 JSON 文件。我需要在文件中的数据中运行 LINQ 查询,并找到其 JSON 数据与某些标准匹配的 JSON 文件。

我可以简单地序列化列表中的所有 JSON 文件,然后在数组上运行我的 LINQ 查询。但是,由于我正在从磁盘读取所有数据,因此该方法需要大量内存。

有什么方法可以在文件系统中的 JSON 文件上运行我的 LINQ 查询,而无需将它们全部加载到内存中?

4

2 回答 2

2

您应该能够按照以下帖子或类似内容中的描述流式传输数据。这应该有助于解决内存问题。 如何在 Json.NET 中将巨大的 JSON 文件解析为流?, 在 .NET 中解析大型 json 文件

于 2019-01-18T02:13:34.330 回答
0

好的 noSql 对你不起作用,但在这里我找到了一个你可以使用的不同解决方案。

在 sql db 中插入文件,然后您可以简单地对它们进行选择统计。

这是一种方法

-- Load file contents into a variable
SELECT @json = BulkColumn
 FROM OPENROWSET (BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j

-- Load file contents into a table 
SELECT BulkColumn
 INTO #temp 
 FROM OPENROWSET (BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j

并使用 Json_Value 读取

SELECT FirstName, LastName,
JSON_VALUE(jsonInfo,'$.info.address[0].town') AS Town
FROM #temp
WHERE JSON_VALUE(jsonInfo,'$.info.address[0].state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address[0].town')

这是导入json文件的方法

https://docs.microsoft.com/en-us/sql/relational-databases/json/import-json-documents-into-sql-server?view=sql-server-2017

这里是如何做一个坐在他们身上的地方。

https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-2017

于 2019-01-18T01:53:02.540 回答