ホームページ > バックエンド開発 > C++ > Json.NET を使用して、.NET で大規模で不正な JSON ファイルを効率的に解析するにはどうすればよいですか?

Json.NET を使用して、.NET で大規模で不正な JSON ファイルを効率的に解析するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-05 18:09:44
オリジナル
201 人が閲覧しました

How Can I Efficiently Parse Large and Malformed JSON Files in .NET Using Json.NET?

Json.NET を使用した .NET での大きな不正な JSON ファイルの解析

大きな JSON ファイルの解析は、特に次の場合に .NET で困難になることがあります。 JSON の形式が不正です。この記事では、非常に大きな JSON ファイルを解析するときに遭遇する課題を調査し、Json.NET を使用した解決策を提供します。

問題: 入れ子になった配列構造

1大きな JSON ファイルに共通する問題は、構造が複雑であることです。あなたの場合、JSON ファイルにはオブジェクトの配列が含まれていますが、各配列はすぐに閉じたり開いたりする括弧で囲まれています。これにより、JSON は全体として見ると技術的に無効になります。

SupportMultipleContent で JsonTextReader を使用する

この不正な 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);
        }
    }
}
ログイン後にコピー

この例では、JSONTextReader は最初にトークン タイプをチェックします。オブジェクト開始トークンに遭遇すると、JsonSerializer を使用して現在のオブジェクトを Contact インスタンスに逆シリアル化します。その後、各連絡先の姓名がコンソールに出力されます。

結論

JsonTextReader の SupportMultipleContent 設定を利用すると、大規模で不正な形式の JSON ファイルを効果的に解析できます。 。ネット。この手法により、メモリの効率的な使用が可能になり、複雑な JSON 構造が処理されるため、JSON データ ストリームの処理に最適です。

以上がJson.NET を使用して、.NET で大規模で不正な JSON ファイルを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート