2016-07-25 14 views
6

Tôi đang cố phân tích cú pháp các tệp JSON và chèn vào trình phân tích cú pháp SQL DB.My làm việc hoàn toàn miễn là các tệp nhỏ (nhỏ hơn 5 MB).Đọc tệp JSON lớn thành biến trong C# .net

Tôi nhận được "Hết bộ nhớ ngoại lệ" khi cố đọc các tệp lớn (> 5MB).

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); 

        } 
       } 

Tôi đã thử phương pháp JSONReader, nhưng không may mắn khi đưa toàn bộ JSON vào chuỗi hoặc biến.Vui lòng khuyên.

+2

gì 'lớn' ? 5.1meg? 5555555555 megabyte? –

+0

* Tôi đã thử cách tiếp cận JSONReader, nhưng không may mắn khi nhận toàn bộ JSON thành chuỗi hoặc biến. * Nếu bằng "JSONReader", bạn có nghĩa là ['JsonTextReader'] (http: //www.newtonsoft. com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm) từ Json.NET, bạn có thể chia sẻ những gì bạn đã thử nhưng không hoạt động? – dbc

+0

foreach (chuỗi trong tập tin) {fileName = System.IO.Path.GetFileName (s); sử dụng (WebClient client = new WebClient()) {using (Strea mReader sr = new StreamReader (client.OpenRead (jsonFilePath + fileName)))) {using (JsonReader reader = new JsonTextReader (sr)) {var jsonString = reader.Value.ToString(); ParseJSON (jsonString, fileName) } } } – user1046415

Trả lời

2

Sử dụng 64 bit, kiểm tra câu trả lời RredCat về một câu hỏi tương tự:

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

NewtonSoft Jason Performance Tips

Đọc bài viết bởi David Cox về tokenizing:

"Cách tiếp cận cơ bản là sử dụng một đối tượng JsonTextReader, là một phần của thư viện Json.NET, một JsonTextReader đọc một mã thông báo JSON tại một thời điểm. ntire tập tin vào một chuỗi. Khi các thẻ được đọc từ tệp, các đối tượng được tạo và đẩy lên và tắt của một chồng. Khi cuối của tập tin được đạt tới, phía trên cùng của ngăn xếp chứa một đối tượng - đỉnh của một cây rất lớn của các đối tượng tương ứng với các đối tượng trong tệp JSON gốc "

Parsing Big Records with Json.NET

-1

Tệp json quá lớn để vừa với bộ nhớ, dưới mọi hình thức.

Bạn phải sử dụng trình đọc JSON chấp nhận tên tệp hoặc luồng làm đầu vào. Nó không rõ ràng từ câu hỏi của bạn mà JSON Reader bạn đang sử dụng. Từ thư viện nào?

Nếu trình đọc JSON của bạn xây dựng toàn bộ cây JSON, bạn sẽ vẫn hết bộ nhớ. Khi bạn đọc tệp JSON, hoặc là anh đào chọn dữ liệu bạn đang tìm kiếm hoặc viết cấu trúc dữ liệu sang định dạng đĩa khác có thể dễ dàng truy vấn, ví dụ: cơ sở dữ liệu sqlite.

+0

Tôi phải đọc toàn bộ tệp và lưu trữ vào SQL DB bằng cách tạo bộ dữ liệu. – user1046415

+0

Sau đó, sử dụng trình đọc JSON chấp nhận tên tệp hoặc luồng làm đầu vào. –

+0

tệp Json của tôi lớn hơn 5 MB .. – user1046415

Các vấn đề liên quan