Необходимо выполнить запросы LINQ для нескольких сотен файлов JSON в дочерних папках.
Используя C#:
У меня есть несколько сотен файлов JSON во вложенных папках в файловой системе. Мне нужно выполнить запросы LINQ внутри данных в файлах и найти файлы JSON, которые соответствуют их данным JSON определенным критериям.
Я могу одновременно сериализовать все файлы JSON в списке, а затем выполнить свой запрос LINQ в массиве. Однако этот подход требует много памяти, так как я читаю все данные с диска.
Есть ли способ выполнить мой запрос LINQ для файлов JSON в файловой системе, не загружая их все в память?
2 ответа
Вы должны иметь возможность передавать данные, как описано в следующих постах или что-то подобное. Это должно помочь с проблемами с памятью. Как проанализировать огромный файл JSON как поток в Json.NET?, Анализ большого файла JSON в.NET
Хорошо, 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