문자열이 C#의 XML 또는 JSON인지 빠르게 확인하는 방법
콘솔 앱에서 C#을 사용하고 있는데 다른 서비스에서 반환되는 문자열이 XML인지 JSON인지 빠르게 확인할 수 있는 방법이 필요합니다.
XML 뿐이라면 스키마와 대조하여 체크할 수도 있고 JSON만으로 해석할 수도 있습니다.넷, 하지만 빌트인을 사용하는 것이 더 빠른 방법이 있을까요?순기능 - 처리 전에 어떤 기능인지 알 수 있습니까?
매우 심플:
- 유효한 JSON은 항상 '{' 또는 '['로 시작합니다.
- 유효한 XML은 항상 '<'로 시작합니다.
비공간 데이터를 말하는 겁니다.
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");
체크하다HttpContentHeaders.ContentType
반환된 재산HttpResponseMessage
- Http 콘텐츠머리글.Content Type 속성.뭐랄까...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 파서에 오류가 발생합니다.
이라고 할 수 있습니다.{[
찾을 수 있습니다.
이런 일이 흔치 않지만, 아직도 JSON을 직접 손으로 만들고 어떤 부분을 잊어버리는 사람도 있습니다.외부 데이터를 신뢰하지 마십시오!
도움이 됐으면 좋겠어요.
언급URL : https://stackoverflow.com/questions/7256142/way-to-quickly-check-if-string-is-xml-or-json-in-c-sharp
'programing' 카테고리의 다른 글
React 16의 hydrate()와 render()의 차이점은 무엇입니까? (0) | 2023.03.01 |
---|---|
웹 소켓 프레임 크기 제한 (0) | 2023.03.01 |
워드프레스 ssl에서 404 오류 발생 (0) | 2023.03.01 |
ng-repeat의 첫 번째 항목 건너뛰기 (0) | 2023.03.01 |
리액트 리액트 리액트 리액트 리액트 리액트:액티브한 경우 디세블로 하려면 어떻게 해야 하나요? (0) | 2023.03.01 |