Подтвердить что ты не робот

Способ быстро проверить, является ли строка XML или JSON в С#

Я использую С# в консольном приложении, и мне нужен быстрый способ проверить, возвращает ли строка из другой службы XML или JSON.

Я знаю, был ли это просто XML, я мог бы проверить его на схему, или если бы это был просто JSON, я мог бы попытаться разобрать его с помощью JSON.Net, но есть ли более быстрый способ - возможно, использовать встроенные функции .Net - просто сказать, что это до того, чтобы переработать его?

4b9b3361

Ответ 1

Очень просто:

  • Действительный JSON всегда начинается с '{' или '['
  • Действительный XML всегда начинается с '<'

Я говорю о непространственных данных.

Ответ 2

public static bool IsJson(this string input){
    input = input.Trim();
    return input.StartsWith("{") && input.EndsWith("}") 
           || input.StartsWith("[") && input.EndsWith("]");
}

он немного грязный, но простой и быстрый

В действительности достаточно проверить первый символ. Тестирование последнего - это очень грубый способ тестирования правильной формы. Это не гарантирует, что это просто повышает вероятность того, что он хорошо сформирован.

Если вам нужна более надежная версия, вы можете воспользоваться коротким замыканием, если только оценивать корректность, если начальная проверка хорошая. Нижеприведенный код основан на 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()
}

Ответ 3

Думал, что я тоже брошу свое решение...

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");

Ответ 4

Ответы хорошие, но я думаю, вы все забыли конец Json. У меня есть хороший пример того, что ваши методы не поймают, и это произойдет и исключение, когда парсер попытается разобрать Json.

{ "position": [{ "object": "position", "powerState": "1", "time": "72796", "place": "1", "clientId": ""]}

Как вы можете видеть, начинается с {и заканчивается с}, секундная стрелка начинается с [и заканчивается], но кто-то забыл закрыть 3-й {. Он генерирует ошибки и ошибки в Json Parser.

Я бы сказал, что лучше проверить начало и конец на {{, который мы находим. Этот метод будет более безопасным.

Обычно это не обычное дело, но некоторые люди все еще владеют собственным Json и забывают некоторые части... Не доверяйте внешним данным!

Надеюсь, это поможет.