Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

C# получение массива из строки

#c_sharp #массивы


Доброго времени суток.
Я пока новичок в C Sharp, так что следующий вопрос может показаться банальным. В
общем, делаю запрос GET к некому URL, например /version.html. В ответ получаю вот такую
информацию:

application.VERSION = {
    VERSION: "194",
    BUILD: "19758"
};


Собственно, вопрос. Возможно ли преобразовать эту строку в массив? Как считать данные
пары "константа : значение"?
    


Ответы

Ответ 1



Это у вас JSON. Так что используйте любую библиотеку для работы с JSON, какая вам понравится. Приблизительно вот так может выглядеть решение на Json.NET using System; using System.Text.RegularExpressions; using Newtonsoft.Json.Linq; namespace Test { static class Program { private static void Main() { string input = "application.VERSION = { VERSION: \"194\", BUILD: \"19758\" };"; // Обрезаем всё, что за пределами фигурных скобок, иначе Json.NET не съест строку. input = Regex.Match(input, "{.*}").Value; // Создаем объектовую модель из строки. JObject jo = JObject.Parse(input); // Теперь можно обращаться к полям JSON-объекта по именам. Console.WriteLine("Version = " + jo["VERSION"]); Console.WriteLine("Build = " + jo["BUILD"]); } } }

Ответ 2



Приведённый текст хоть и похож на JSON, но всё же им не является. Как вариант, можно использовать регулярное выражение. string input = "application.VERSION = { VERSION: \"194\", BUILD: \"19758\" };"; string pattern = @"(\w+) : \s+ "" (.+?) "" "; var matches = Regex.Matches(input, pattern, RegexOptions.IgnorePatternWhitespace); foreach (Match m in matches) { Console.WriteLine("Name: " + m.Groups[1].Value); Console.WriteLine("Value: " + m.Groups[2].Value); }

Ответ 3



Для работы с JSON в C# есть несколько вариантов. Здесь это неплохо описано https://stackoverflow.com/questions/6620165/how-can-i-parse-json-with-c. Если вкратце - то хорошо для этих задач подходит Json.NET http://www.newtonsoft.com/json. Вот пример с их сайта как десериализовать JSON(правда в класс, а не в массив). Естественно должен быть класс с полями с такими же именами string json = @"{ 'Name': 'Bad Boys', 'ReleaseDate': '1995-4-7T00:00:00', 'Genres': [ 'Action', 'Comedy' ] }"; Movie m = JsonConvert.DeserializeObject(json); string name = m.Name;

Комментариев нет:

Отправить комментарий