2016-07-25 18 views
6

Próbuję sparsować pliki JSON i wstawić do SQL DB. Mój analizator działał idealnie dobrze, o ile pliki są małe (mniej niż 5 MB).Czytanie dużego pliku JSON na zmienną w C# .net

Podczas próby odczytu dużych plików (> 5 MB) pojawia się wyjątek "Brak pamięci".

if (System.IO.Directory.Exists(jsonFilePath)) 
       { 
        string[] files = System.IO.Directory.GetFiles(jsonFilePath); 
        foreach (string s in files) 
        { 
         var jsonString = File.ReadAllText(s); 
         fileName = System.IO.Path.GetFileName(s); 
         ParseJSON(jsonString, fileName); 

        } 
       } 

Próbowałem podejście JSONReader, ale nie ma szczęścia, aby uzyskać cały JSON na ciąg lub zmiennej.Please doradzić.

+2

Co to jest«duży» ? 5.1meg? 5555555555 megabajtów? –

+0

* Próbowałem podejście JSONReader, ale nie ma szczęścia, aby uzyskać cały JSON na ciąg lub zmiennej. * Jeśli przez "JSONReader" masz na myśli ['JsonTextReader'] (http: //www.newtonsoft. com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm) z Json.NET, czy możesz udostępnić to, czego próbowałeś, ale nie działa? – dbc

+0

foreach (ciągi w plikach) {fileName = System.IO.Path.GetFileName (s); przy użyciu (klient WebClient = new WebClient()) {przy użyciu (Strea mReader SR = nowy StreamReader (client.OpenRead (jsonFilePath + nazwach))) {stosując (JsonReader czytnik = nowy JsonTextReader (SR)) {var jsonString = reader.Value.ToString(); ParseJSON (jsonString, nazwy) } } } – user1046415

Odpowiedz

2

Zastosowanie 64-bitowy, należy sprawdzić odpowiedź RredCat jest na podobnym pytaniem:

Newtonsoft.Json - Out of memory exception while deserializing big object

NewtonSoft Jason Performance Tips

Przeczytaj artykuł David Cox o tokenizing:

"Podstawowym rozwiązaniem jest użyj obiektu JsonTextReader, który jest częścią biblioteki Json.NET.JsonTextReader odczytuje plik JSON jeden token naraz, dlatego unika narzutów czytania e ntire plik na ciąg. Ponieważ tokeny są odczytywane z pliku, obiekty są tworzone i wypychane na stos. Kiedy koniec pliku zostanie osiągnięty, wierzchołek stosu zawiera jeden obiekt - szczyt bardzo wielkim drzewie obiektów odpowiadających obiektów w oryginalnym pliku JSON "

Parsing Big Records with Json.NET

-1

Plik json jest zbyt duży, aby zmieścić się w pamięci, w dowolnej formie.

Należy użyć czytnika JSON, który akceptuje nazwę pliku lub strumień jako dane wejściowe. Z twojego pytania nie wynika, który JSON Reader używasz. Z której biblioteki?

Jeśli twój czytnik JSON zbuduje całe drzewo JSON, nadal będzie ci brakować pamięci. Podczas odczytywania pliku JSON można wybrać żądane dane lub napisać struktury danych do innego formatu na dysku, który można łatwo sprawdzić, na przykład bazy danych sqlite.

+0

Muszę przeczytać cały plik i przechowywać w SQL DB, tworząc zestawy danych. – user1046415

+0

Następnie użyj czytnika JSON, który akceptuje nazwę pliku lub strumień jako dane wejściowe. –

+0

moje pliki Json są większe niż 5 MB .. – user1046415