programing

문자열이 C#의 XML 또는 JSON인지 빠르게 확인하는 방법

javamemo 2023. 3. 1. 08:47
반응형

문자열이 C#의 XML 또는 JSON인지 빠르게 확인하는 방법

콘솔 앱에서 C#을 사용하고 있는데 다른 서비스에서 반환되는 문자열이 XML인지 JSON인지 빠르게 확인할 수 있는 방법이 필요합니다.

XML 뿐이라면 스키마와 대조하여 체크할 수도 있고 JSON만으로 해석할 수도 있습니다.넷, 하지만 빌트인을 사용하는 것이 더 빠른 방법이 있을까요?순기능 - 처리 전에 어떤 기능인지 알 수 있습니까?

매우 심플:

  1. 유효한 JSON은 항상 '{' 또는 '['로 시작합니다.
  2. 유효한 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

반응형