.NET で大規模な非標準 JSON ファイルを効率的に解析するにはどうすればよいですか?
Jan 06, 2025 am 04:23 AM.NET での大きな JSON ファイルの解析
かなりのサイズの JSON ファイルを扱う場合、標準の JsonConvert.Deserialize メソッドを使用すると問題が発生することは珍しくありません。この記事では、Json.NET が提供する独自のソリューションを詳しく調べることで、この問題に対処します。
メモリの問題
元の質問で示されているように、デフォルトの逆シリアル化メソッドでは処理時にメモリ例外が発生する可能性があります。大きな JSON ファイル。これは多くの場合、逆シリアル化プロセスのメモリ内の性質が原因であり、大規模なデータ セットでは問題になる可能性があります。
無効な JSON 形式
質問で説明されている特定のシナリオでは、追加の複雑さが生じます。 JSON ファイルには、無効な構文で区切られた複数の配列が含まれていたため、JSON 標準に準拠していませんでした。この無効な形式は、Json.NET の自動逆シリアル化に問題を引き起こしました。
解決策: JsonTextReader
これらの課題を克服するために、Json.NET は特殊なソリューションである JsonTextReader を提供します。 JsonTextReader を直接使用して JSON ファイルを読み取ることで、SupportMultipleContent フラグを true に設定できます。このフラグにより、リーダーは複数の配列を含む非標準の JSON 形式を処理できるようになります。
ストリーミング アプローチ
ファイル全体を一度に逆シリアル化する代わりに、ストリーミング アプローチを採用します。ループを使用すると、JSON ファイル内の個々の項目を逆シリアル化して、メモリ効率の高い方法でデータを処理できるようになります。
例
以下のコード スニペットは、このストリーミング アプローチを示しています。
using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(stringUrl)) using (StreamReader streamReader = new StreamReader(stream)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { reader.SupportMultipleContent = true; var serializer = new JsonSerializer(); while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { Contact c = serializer.Deserialize<Contact>(reader); Console.WriteLine(c.FirstName + " " + c.LastName); } } }
結論
SupportMultipleContent フラグを指定して JsonTextReader を利用する設定すると、非標準の構文に直面した場合でも、大きな JSON ファイルを効果的に解析できます。このアプローチにより、メモリ効率とデータ整合性の両方が保証されます。
以上が.NET で大規模な非標準 JSON ファイルを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
