Синтаксический анализ сложного JSON на фабрике данных Azure

#json #azure-data-factory #azure-data-factory-pipeline

#json #azure-data-factory #azure-data-factory-конвейер

Вопрос:

Дорогие, я использую ADF для анализа выходных данных REST API, которые поступают в структуре JSON. Проблема в том, что JSON содержит массив строк, каждое строковое значение содержит объект JSON. Я хочу извлечь значения самого внутреннего JSON.. Я пробовал несколько попыток, но пока безуспешно..

Пример структуры JSON

   {
    "tables": [
      {
        "name": "PrimaryResult",
        ,
        "rows": [
          ["{"Subscription Name":"master","Operation Name":"5f2a763e4f5cabb8d38dd66a",... "}","other nested JSON".....
 

Я не могу проанализировать те JSON, которые поступают как строки, заключенные в двойные кавычки.

есть идеи??

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

1. Если вы разочарованы отсутствием в ADF выбора из нескольких коллекций, когда дело доходит до синтаксического анализа JSON, пожалуйста, поддержите это: feedback.azure.com/d365community/idea /…

Ответ №1:

Вы можете использовать функцию json для изменения строки JSON на объект JSON.

Мой тест:

Вывод веб-активности введите описание изображения здесь

Используйте это выражение, чтобы получить значение Subscription Name :

 @json(activity('Web1').output.tables[0].rows[0][0])['Subscription Name']
 

Вывод заданной переменной activity:

введите описание изображения здесь

Обновить

Я не уверен, что вам нужно. Похоже, вы хотите изменить всю строку JSON на объект JSON.

Если это так, вы можете создать переменную массива, выполнить цикл rows[0] для каждого действия и преобразовать элементы в объект JSON в новом массиве.

введите описание изображения здесь

введите описание изображения здесь

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

1. Это работает нормально. Но мне нужно передать весь внутренний JSON другому действию (например, копировать), чтобы разбить его и сохранить значения в столбцах базы данных.. что мне делать? Учитывая, что JSON содержит дополнительные вложенные массивы. Пожалуйста, сообщите..

2. @user9942114 Я обновляю свой ответ. Это вам нужно?

3. такой подход не позволит мне выполнять вложенные циклы или записывать проанализированные данные в файлы.. Пожалуйста, сообщите..

4. Пожалуйста, покажите мне скриншот вашего конвейера и расскажите мне все, что вам нужно.

5. @mamhh, предполагая, что вы хотите сделать что-то похожее на то, что я сделал: замените поле foreach «items» @activity(‘Получить список таблиц’).output.tables[0].rows[0] на @activity(‘Получить список таблиц’).output.tables[0]. строки это приведет к перебору строк. Затем замените @json(item()) на @item()[0]. При этом будет получен первый элемент в каждой строке.