コンソールアプリでC#を使用していますが、別のサービスから返される文字列がXMLかJSONかをすばやく確認する方法が必要です。
それが単なるXMLであるか、スキーマと照合できるか、JSONだけである場合はJSON.Netで解析することができますが、より迅速な方法があります-。それを処理する前にそれが何であるかを教えてください?
非常に簡単:
私は非空間データについて話している。
public static bool IsJson(this string input){
input = input.Trim();
return input.StartsWith("{") && input.EndsWith("}")
|| input.StartsWith("[") && input.EndsWith("]");
}
ちょっと汚いけどシンプルで速い
基本的に最初のキャラクターをテストするだけで十分です。最後のテストは、整形式をテストする非常に失礼な方法です。単純に整形式になる可能性を高めるだけではありません。
より堅牢なバージョンが必要な場合は、ifの短絡を利用して、初期チェックが良好な場合にのみ整形式を評価できます。以下のコードはJSON.netに依存しています
public static bool IsJson(this string input){
input = input.Trim();
Predicate IsWellFormed = () => {
try {
JToken.Parse(input);
} catch {
return false;
}
return true;
}
return (input.StartsWith("{") && input.EndsWith("}")
|| input.StartsWith("[") && input.EndsWith("]"))
&& IsWellFormed()
}
私もここに私の解決策を投げると思いました...
if (jsonData.Trim().Substring(0, 1).IndexOfAny(new[] {'[', '{'}) != 0)
throw new Exception("The source file must be in JSON format");
または拡張機能...
public static bool IsJson(this string jsonData)
{
return jsonData.Trim().Substring(0, 1).IndexOfAny(new[] { '[', '{' }) == 0;
}
使用法:
if (!jsonData.IsJson())
throw new Exception("The source file must be in JSON format");
返されたHttpResponseMessage
のHttpContentHeaders.ContentType
プロパティを確認します- HttpContentHeaders.ContentType Property 。 application/json; charset=utf-8
、text/json; charset=utf-8
、text/xml; charset=utf-8
のようなものが表示されます。調べることができるMediaTypeHeaderValue
インスタンスを返します。あなたの場合、あなたは MediaTypeHeaderValue.SubType Property を見るだろう。
これが最も安全で正確な方法です。もちろん、xmlまたはjsonを文字列として返すAPIを持っている場合を除きます。
Content-Type
値を文字列として持っている場合、 MediaTypeHeaderValue.Parse(String) を使用してContent-Type
文字列の解析を支援できます。
Content-Type
プロパティはHTTP仕様の一部として定義され、詳細は次のとおりです。 Content-Type [MDN]
答えはいいですが、Jsonの終わりを忘れていると思います。ここに、あなたのメソッドがキャッチせず、パーサーがJsonを解析しようとすると例外を通過するという良い例があります。
{"positions":[{"object": "position"、 "powerState": "1"、 "time": "72796"、 "place": "1"、 "clientId": ""] }
ご覧のとおり、{で始まり}で終わり、秒針では[で始まり、]で終わりますが、誰かが3番目の{を閉じるのを忘れました。 Json Parserでエラーを生成します。
私は、{[を見つけることの始まりと終わりをチェックする方が良いと言います。この方法はより安全です。
通常、それは普通ではありませんが、一部の人々はまだ自分のJsonを手作りし、一部を忘れています...外部データを信頼しないでください!
役に立てば幸いです。