Работа с JSON через JMESPath

Как извлекать и трансформировать данные в Нейро42 с помощью мощного языка запросов

JMESPath — это язык запросов к JSON, который позволяет легко находить, фильтровать и преобразовывать данные. Он отлично подходит для работы со сложными вложенными структурами, особенно когда в сообщениях API приходит слишком много лишнего.

 

Метод $jmespath() в n8n

В n8n доступен специальный метод:

$jmespath(object, searchString)

Он делает то же, что и:

var jmespath = require(‘jmespath’);

jmespath.search(object, searchString);

 

Только компактнее — и работает прямо в Выражениях.

В Выражениях код должен быть однострочным, поэтому длинные варианты использовать нельзя.

Параметры

  • object — JSON-объект (например, $json, $node.<name>.json).
  • searchString — строка с JMESPath-запросом.

Важно: порядок параметров

В официальной документации примеры идут как search(searchString, object).

Но библиотека JavaScript использует формат: search(object, searchString).

В Нейро42 используем второй вариант.

Примеры частых задач

Для примеров используем JSON из Webhook:

[

  {

    «body»: {

      «people»: [

        { «first»: «James», «last»: «Green» },

        { «first»: «Jacob», «last»: «Jones» },

        { «first»: «Jayden», «last»: «Smith» }

      ],

      «dogs»: {

        «Fido»: { «color»: «brown», «age»: 7 },

        «Spot»: { «color»: «black and white», «age»: 5 }

      }

    }

  }

]

 

Перед тестированием установите Code node → Mode: Run Once for Each Item

Примеры JMESPath в Нейро42

  1. Получить список всех имен людей

{{$jmespath($json.body.people, «[*].first»)}}

Результат:

[«James», «Jacob», «Jayden»]

 

  1. Взять только первые два имени (Slice Projection)

{{$jmespath($json.body.people, «[:2].first»)}}

Результат:

[«James», «Jacob»]

 

  1. Получить список возрастов всех собак (Object Projection)

{{$jmespath($json.body.dogs, «*.age»)}}

Результат: [7, 5]

  1. Использовать multiselect для объединения данных

Получим пары [first, last]:

{{$jmespath($json.body.people, «[].[first, last]»)}}

 

Результат:

[

  [«James», «Green»],

  [«Jacob», «Jones»],

  [«Jayden», «Smith»]

]

Пример: альтернативы стрелочным функциям

Допустим, Code node возвращает такой список:

return [

  { json: { name: «HP», category_id: 5529735, num_products: «45» } },

  { json: { name: «Lenovo», category_id: 5529740, num_products: «86» } }

];

 

И вы хотите найти category_id для элемента с именем Lenovo.

Используем JMESPath-фильтр:

{{ $jmespath($(«Code»).all(), «[?json.name==’Lenovo’].json.category_id») }}

 

Результат: [5529740]

Дополнительные возможности JMESPath

JMESPath поддерживает:

  • фильтры ([?condition])
  • проекции для массивов и объектов
  • построение новых структур ({name: field, …})
  • сортировку, агрегацию и трансформации

Полную документацию можно изучить на сайте JMESPath

Предупреждение о применении иностранного языка

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

Техническая документация не является информацией для широкого круга потребителей. Документация предназначена исключительно для специализированных целей и рассчитана на аудиторию профессионалов, обладающих соответствующей квалификацией и знанием отраслевых стандартов и терминологии. Использование иностранной лексики согласуется с положениями действующего российского законодательства, регулирующего употребление иностранных слов в специальных материалах, направленных на профессиональных пользователей

Данная мера принята для минимизации рисков неправильного толкования ключевых понятий и предотвращения негативных последствий, связанных с некорректностью переводов сложных технических терминов и выражений.

Мы обращаем внимание на тот факт, что наличие иностранного языка в данной документации обусловлено профессиональной необходимостью и соответствует установленным нормам и правилам использования специализированной литературы и документации в Российской Федерации.

Свяжитесь с нами

Спасибо, получили вашу заявку!
Скоро мы с вами свяжемся.

А пока посмотрите реализованные проекты, которыми мы поделились на сайте.