使用 C#:
我在文件系统的嵌套文件夹中有数百个 JSON 文件。我需要在文件中的数据中运行 LINQ 查询,并找到其 JSON 数据与某些标准匹配的 JSON 文件。
我可以简单地序列化列表中的所有 JSON 文件,然后在数组上运行我的 LINQ 查询。但是,由于我正在从磁盘读取所有数据,因此该方法需要大量内存。
有什么方法可以在文件系统中的 JSON 文件上运行我的 LINQ 查询,而无需将它们全部加载到内存中?
使用 C#:
我在文件系统的嵌套文件夹中有数百个 JSON 文件。我需要在文件中的数据中运行 LINQ 查询,并找到其 JSON 数据与某些标准匹配的 JSON 文件。
我可以简单地序列化列表中的所有 JSON 文件,然后在数组上运行我的 LINQ 查询。但是,由于我正在从磁盘读取所有数据,因此该方法需要大量内存。
有什么方法可以在文件系统中的 JSON 文件上运行我的 LINQ 查询,而无需将它们全部加载到内存中?
您应该能够按照以下帖子或类似内容中的描述流式传输数据。这应该有助于解决内存问题。 如何在 Json.NET 中将巨大的 JSON 文件解析为流?, 在 .NET 中解析大型 json 文件
好的 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/t-sql/functions/json-value-transact-sql?view=sql-server-2017