Zapier - Catch Hook - JSON Array - Цикл над каждым элементом в массиве - PullRequest
0 голосов
/ 21 сентября 2018

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

Вот пример входящих данных JSON:

    {
            "first_name": "Bryan",
            "last_name": "Helmig",
            "age": 27,
            "data": [
                {
                    "title": "Two Down, One to Go",
                    "type": "Left"
                },
                {
                    "title": "Talk the Talk",
                    "type": "Right"
                },
                {
                    "title": "Know the Ropes",
                    "type": "Top"
                }
            ]
    }

Размер массива будет динамическим.

Проблема в том, что когда я импортирую эти данные в ловушку, это дает мне

data
    title: Two Down, One to Go
    type: Left
    title: Talk the Talk
    type: Right
    title: Know the Ropes
    type: Top

Итак, в основном это говорит о том, что data - это просто большая строка всего этого вместе взятого,

Может кто-нибудь помочь мне выяснить, возможно ли сделать цикл Zap поверх этого и сделать что-нибудь, например, вставить данные в лист для любого элемента в массиве?Я знаю о действиях «кода», я выбрал JavaScript, который я мог бы проанализировать строку, но это не кажется эффективным.Кроме того, в действительности в объектах массива JSON будет много данных.

РЕДАКТИРОВАТЬ: РЕШЕНО!ОТВЕТЬ НИЖЕ

1 Ответ

0 голосов
/ 22 сентября 2018

Итак, первая часть - это Catch Raw Hook для триггера.Это обычные "Webhooks", но вы должны нажать, чтобы показать менее распространенные варианты.С Catch Raw Hook ваши данные не будут автоматически превращаться в переменные через приложение Zapier, у вас будут необработанные данные JSON.

Как только у вас будет сырой JSON, в моем случае у вас будет действие, и это будет действие «Код».Я использую JavaScript.В моем шаблоне я собираю всю строку JSON (весь импортированный вами JSON сейчас является строкой, а не объектом, поэтому мы не можем использовать нотацию «. » (точка) для доступа к частямЭто).

Вам понадобится JSON.parse() строка в коде.Но сначала позвольте мне объяснить, что у Zapier есть предопределенная переменная с именем inputData, которую вы будете использовать в своем коде.Затем в верхней части раздела «Редактировать шаблон» вашего «Кода» Действие вы увидите, что вы можете назвать переменную той строки JSON, которую вы импортировали.

Теперь самое интересное!В коде вы наберете:

// of course, you can change the variables to what you want
// but 'inputData' is unique, can't change that
const myData = JSON.parse(inputData.rawJsonData); 

Итак, мои необработанные данные - это строка, это еще не JSON, поэтому эта строка кода делает его объектом JSON.И теперь, как объект, мы можем зацикливаться на нем или .map, или обращаться к this.that или к чему угодно.

Следующая важная вещь, о которой стоит упомянуть о «Коде» в Zapier, это то, что вы получаете свои вещи, вы return.Итак, в следующих нескольких строках я собираюсь вернуть функцию .map, которая возвращает каждый элемент в массиве.И трудно понять, как Zapier относится к этому, но на самом деле он запускает следующее «действие», которое вы создаете (например, добавляете строку в лист) для каждого цикла в этом .map.Итак, давайте посмотрим ниже:

return myData.data.map(item => {
    return item;
});

Если вы помните, у меня в массиве JSON был массив "data", который я перечислил в исходном вопросе.Он будет зацикливаться на этом массиве, и, так как я return ing, то он будет выполнять «Добавить строку в лист» (в моем случае) для каждого цикла, таким образом, вставляя все мои данные в виде нескольких строк в моей электронной таблице.

Итак, готовый код:

const myData = JSON.parse(inputData.rawJsonData);

return myData.data.map(item => {
    return item; 
});
...