1. ホーム
  2. c#

[解決済み] JSON.NETを使用して、文字列が有効なJSONであることを確認する方法

2022-04-20 07:38:15

質問

生の文字列があります。その文字列が有効なJSONかどうかを検証したいだけです。私はJSON.NETを使用しています。

どのように解決するのですか?

コードから

最も良い方法は、Parseを try-catch で、パースに失敗した場合は例外をキャッチします。 (私は TryParse メソッド) .

(JSON.Netを使用)

最も簡単な方法は、以下の通りです。 Parse を使用して文字列を JToken.Parse で始まる文字列かどうかもチェックし、さらに { または [ で終了し } または ] それぞれ (ここから追加される 回答 ) :

private static bool IsValidJson(string strInput)
{
    if (string.IsNullOrWhiteSpace(strInput)) { return false;}
    strInput = strInput.Trim();
    if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
        (strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
    {
        try
        {
            var obj = JToken.Parse(strInput);
            return true;
        }
        catch (JsonReaderException jex)
        {
            //Exception in parsing json
            Console.WriteLine(jex.Message);
            return false;
        }
        catch (Exception ex) //some other exception
        {
            Console.WriteLine(ex.ToString());
            return false;
        }
    }
    else
    {
        return false;
    }
}

のチェックを追加する理由は { または [ などは、その事実に基づいて JToken.Parse のような値をパースすることになります。 "1234" または "'a string'" を有効なトークンとして使用することができます。もう一つの選択肢は JObject.ParseJArray.Parse をパースして、そのうちのどれかが成功するかどうかを確認するのですが、確か {}[] の方が簡単なはずです。 (@RhinoDevel に感謝します。 ポインティング を表示します)

JSON.Netを使用しない場合

.Netフレームワーク4.5を利用することができます。 System.Json 名前空間 のように。

string jsonString = "someString";
try
{
    var tmpObj = JsonValue.Parse(jsonString);
}
catch (FormatException fex)
{
    //Invalid json format
    Console.WriteLine(fex);
}
catch (Exception ex) //some other exception
{
    Console.WriteLine(ex.ToString());
}

(をインストールする必要があります。 System.Json コマンドを使用してNugetパッケージマネージャから実行します。 PM> Install-Package System.Json -Version 4.0.20126.16343 パッケージマネージャーコンソールにて) (より引用 ここで )

ノンコードの方法。

通常、小さなjson文字列があり、その中から間違いを見つけようとする場合、私は 個人的に オンラインツールを使用することをお勧めします。私が普段やっていることは

  • にJSON文字列を貼り付けます。 JSONLint JSONバリデーター を表示し が有効なJSONであることを示します。
  • その後、正しいJSONを http://json2csharp.com/ と テンプレートクラスを生成し、それをデシリアライズする。 をJSON.Netで使用する。