Pemprosesan yang cekap bagi fail JSON yang besar: penstririan penstriman Json.NET
Penghuraian yang cekap adalah penting apabila berurusan dengan set data JSON yang besar yang tidak boleh dimuatkan sepenuhnya ke dalam memori. Json.NET menyediakan penyelesaian pemprosesan data JSON penstriman yang berkuasa melalui JsonReader
nya.
Gambaran Keseluruhan Masalah
Fail JSON mengandungi urutan objek yang sama, matlamatnya adalah untuk membaca satu objek pada satu masa tanpa memuatkan keseluruhan fail ke dalam memori.
Percubaan yang gagal
Pada mulanya cuba untuk menyahsiri fail menghasilkan pengecualian kerana tatasusunan JSON dijangka, bukan objek. Menyahsiri tatasusunan ke dalam senarai menyelesaikan ralat tetapi mengakibatkan penggunaan memori yang tinggi.
Penyelesaian Penstriman
Untuk mengatasi batasan ini, penyelesaian yang dicadangkan membaca aksara fail JSON mengikut aksara dan hanya menyahsiri objek apabila pembaca menemui aksara "{" yang menunjukkan permulaan objek.
Contoh Kod
Berikut ialah kod yang dioptimumkan untuk menstrim fail JSON menggunakan JsonReader
:
<code class="language-csharp">JsonSerializer serializer = new JsonSerializer(); MyObject o; using (FileStream s = File.Open("bigfile.json", FileMode.Open)) using (StreamReader sr = new StreamReader(s)) using (JsonReader reader = new JsonTextReader(sr)) { while (reader.Read()) { // 仅当流中存在 "{" 字符时才反序列化 if (reader.TokenType == JsonToken.StartObject) { o = serializer.Deserialize<MyObject>(reader); // 对 o 对象进行处理 } } }</code>
Kod ini membaca fail dengan cekap, menyahsiri objek semasa ia ditemui dalam strim, tanpa menggunakan terlalu banyak RAM. Ambil perhatian bahawa myobject
harus diganti dengan jenis objek sebenar anda MyObject
. Pengendalian objek o
telah ditambahkan pada kod supaya setiap objek boleh dimanipulasi selepas penyahserikatan.
Atas ialah kandungan terperinci Bagaimanakah Json.NET Menstrim JSON Penyahserialisasian untuk Memproses Fail Besar dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!