大きな JSON ファイルを解析するときは、データ構造内の潜在的な不整合を考慮することが重要です。多くの場合、Web サービスは標準形式に完全に準拠していない JSON 応答を返します。よくある問題の 1 つは、単一の JSON ファイル内に複数の配列構造が存在することです。
特定のシナリオでは、JSON データに個々の配列構造が含まれるという問題が発生しました。配列は閉じ括弧と開き括弧で区切られます。この不規則な形式により、JsonConvert.DeserializeObject などの従来のメソッドを使用して JSON 全体を単一の配列として逆シリアル化することが不可能になりました。
この課題に対処するにはを使用すると、Json.NET のストリームベースの解析の柔軟性を活用できます。 JsonTextReader を作成し、その SupportMultipleContent プロパティを true に設定すると、リーダーが 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); } } }
このメソッドは、JSON コンテンツ ストリームをストリームごとに読み取り、各オブジェクトを個別のエンティティとして解析します。左中括弧に遭遇すると、単一の連絡先オブジェクトを Contact コンテナ クラスに逆シリアル化し、連絡先情報を出力します。
このアプローチの利点は、JSON データを解析せずに段階的に処理できることです。ファイル全体を一度に。これは、使用可能なメモリ容量を超える大きな JSON ファイルの場合に特に有益です。
複数のコンテンツをサポートするストリームベースの解析を利用することで、サイズに関係なく、不規則な JSON 構造を効果的に処理し、データを効率的に解析できます。または複雑さ。
以上が複数の配列を含む大きな非標準 JSON ファイルを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。