Иногда веб-сервисы отправляют информацию в формате JSON или XML, и чтобы получить данные их приходится разбирать.
Для упрощения этой задачи появилось действие Обработка JSON/XML:
Парсинг
Первый вариант работы - это разбор JSON/XML строки.
Можно сразу провести обработку используя JSONPath или XPath. Результат выполнения действия заносится в переменную проекта Json или Xml соответственно, и данные можно просмотреть в окне Переменные.
Для доступа к значениям доступны макросы. Например: {-Json.employees.Count-} или {-Json.employees[2].firstName-}
После того как парсинг прошел успешно, в любом поле ввода где поддерживаются макросы будут полные подсказки.
Сохранение в список или таблицу
Данные могут содержать массивы и их удобно занести в список для последующей обработки после того как нужный текст был распаршен.
Свойство - указывает на поле, которое будет разбираться как массив. Здесь возможно использовать вложенность, указывая через точку (например: store.employees). Если поле не является массивом, то в список заносится один элемент.
Подсвойство - так как в массивах могут находиться сложные объекты, можно указать какое значение из него брать для списка.
Запись данных в таблицу работает аналогичным образом, только в каждую колонку можно записать свое подсвойство.
Особенности XML
У XML имеются атрибуты узлов. Для доступа к ним в макросах используются квадратные скобки со строковым значением. (Например: {-Xml.PurchaseOrder[«PurchaseOrderNumber»]-}).
Работа в коде
В C# объекты JSON и XML находятся в объекте project. Они имеют тип dynamic. Из-за этого редактор кода не может полноценно показывать выпадающие подсказки.
Пример кода работы с XML:
project.Xml.FromString(project.Variables["XmlText"].Value); return project.Xml.PurchaseOrder.Address[0]["Type"];
Пример 2:
var list = new List<string>(); for(int i = 0; i < project.Xml.PurchaseOrder.Address.Count; i++) { list.Add(project.Xml.PurchaseOrder.Address[i].Name.Value); } return string.Join(", ", list);
Пример 3:
var list = new List<string>(); foreach(dynamic i in project.Xml.PurchaseOrder.Address) { list.Add(i.Name.Value); } return string.Join(", ", list);
Аналогично происходит и с Json. Однако стоит учесть, что доступ к свойствам происходит без использования “Value”.
Пример:
return project.Json.employees[1].firstName;
Конструктор XPath/JsonPath
Инструмент полезен когда нужно составить правильных XPath/JSONPath.
Он позволяет выделить кусок в исходном тексте и, если это возможно, автоматически создать выражение.