[解決済み] JSON.NETを使用して、文字列が有効なJSONであることを確認する方法
質問
生の文字列があります。その文字列が有効な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.Parse
と
JArray.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で使用する。
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] UTF-8 byte[]を文字列に変換する方法
-
[解決済み] ASP.NETでJSONを単純なDictionary<string,string>にデシリアライズするにはどうすればよいですか?
-
[解決済み] json.netを使用して、クラス内のプロパティがnullの場合、それを無視する方法
-
[解決済み] Json.netでシリアライズする際、プロパティ名を変更するにはどうすればよいですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
-
[解決済み】JSONをXMLに、XMLをJSONに変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] 値のパース時に予期せぬ文字が発生した
-
[解決済み】JSONのキーは引用符で囲む必要があるのでしょうか?