#azure #azure-data-factory
Вопрос:
Я извлекаю действие(«getData»). вывод.значение, и результат :
'[{"name":"8.0"},{"name":"8.1"},{"name":"7.2"}]'
но мне нужно
"8.0","8.1","7.2"
У вас есть какие-нибудь идеи, как конвертировать?
Я пробовал использовать действие ForEach, а затем использовать item().name, но есть ошибка без сообщения.
Комментарии:
1. Вам нужно повторить его или вам нужна объединенная строка? В любом случае, используйте a Для Каждого цикла. Укажите элементы, а затем используйте @item().name в цикле. Используйте действие Добавить переменную внутри цикла, если вам нужно собрать объединенную строку.
2. Внутри цикла у меня есть действие копирования, которое извлекает данные из API (элемент().имя является частью запроса). Зачем добавлять переменную?
3. Используйте Добавление только в том случае, если вам нужно построить строку следующим образом: «8.0»,»8.1″,»7.2″. Если вы просто повторяете, то вам не нужно этого делать, это не было ясно из вашего вопроса.
4. Я использовал переменную добавления, но я получаю : ‘[«8.1″,»8.0″,»7.2»].
5. можете ли вы уточнить, какой тип выходных данных вы пытаетесь построить, это массив значений или одна строка объединенных значений?
Ответ №1:
Если это будет статичным, то вы могли бы просто использовать:
@replace(replace(replace(replace(string(variables('TestArray')), '{"name":', ''), '}', ''), '[', ''), ']', '')
Плюсы: вам не нужно использовать ForEach, особенно если в выходных данных есть сотни потенциальных полей имен.
Минусы: Этот метод является жестким, так что он будет работать только в том случае, если ваши выходные данные всегда будут в этом формате.
Смотрите скриншоты и комментарии ниже:
Кавычки всегда будут экранированы при просмотре строкового вывода, ADF автоматически экранирует все символы кавычек, но когда переменная/вывод фактически используется, экранированные символы игнорируются. Вот доказательство этого, используя выходные данные в качестве дополнительного столбца для записи выходных данных в столбец БД: Снимок экрана 1 (Дополнительный столбец в приемнике)
Снимок экрана 2 (Схема сопоставления)
Снимок экрана 3 (Показывает, что выходные данные не содержат эскейпов в БД)
Комментарии:
1. Добавьте дополнительную замену и разделение на основе приведенной выше формулы, чтобы можно было хранить в виде переменной массива @split(заменить(заменить(заменить(заменить(заменить(строка(переменные(‘testArray’))), ‘{«имя»:’, «), ‘}’, «), ‘[‘, «), ‘]’, «),'»‘,»),’,’)
2. Да, я не был уверен, нужна ли оператору строка или массив, но в любом случае это сработает.