Необходимо выполнить запросы LINQ для нескольких сотен файлов JSON в дочерних папках. - PullRequest
0 голосов
/ 18 января 2019

Использование c #:

У меня есть несколько сотен файлов JSON во вложенных папках в файловой системе. Мне нужно выполнить запросы LINQ внутри данных в файлах и найти файлы JSON, которые соответствуют их данным JSON определенным критериям.

Я могу одновременно сериализовать все файлы JSON в списке, а затем выполнить мой запрос LINQ в массиве. Однако этот подход требует много памяти, так как я читаю все данные с диска.

Можно ли выполнить мой запрос LINQ для файлов JSON в файловой системе, не загружая их все в память?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы должны иметь возможность потоковой передачи данных, как описано в следующих сообщениях или что-то подобное. Это должно помочь с проблемами с памятью. Как проанализировать огромный JSON-файл как поток в Json.NET?, Разбор большого файла json в .NET

0 голосов
/ 18 января 2019

Хорошо, 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

...