Задача:
При роботі з даними часто виникає потреба отримати значення за певними ключами зі списку. JMESPath – це потужний інструмент для фільтрації та обробки даних у JSON форматі. У цій статті ми розглянемо, як ефективно використовувати JMESPath для вирішення цієї задачі на прикладі.
Для початку, давайте розглянемо вихідну задачу. Ми маємо наступні дані:
1 |
{"a": "foo", "b": "bar", "c": "baz"} |
Та список ключів, за якими ми хочемо отримати значення:
1 |
["b", "c"] |
Наша мета – отримати такий результат:
1 |
["bar", "baz"] |
Спроба використати вираз map(*.@, ["b", "c"])
не дає нам очікуваних результатів. Давайте розберемося, як вирішити цю задачу з використанням JMESPath.
Для початку, розглянемо простий приклад використання JMESPath для отримання значення за певним ключем. Для цього ми можемо використати оператор “dot” в JMESPath, що дозволяє звертатися до значень за ключами.
1 |
data.key_name |
Наприклад, якщо ми хочемо отримати значення, що відповідає ключу “b” у наших даних, ми можемо використати вираз:
1 |
data.b |
Це дозволить нам отримати значення “bar” із наших даних.
Тепер давайте розглянемо, як використовувати функцію map
у JMESPath для отримання значень за списком ключів.
Функція map
дозволяє застосовувати вираз до кожного елемента списку. У нашому випадку, ми хочемо отримати значення за кожним ключем зі списку. Ми можемо скористатися функцією map
разом з оператором “dot”, щоб отримати значення за кожним ключем зі списку.
1 |
map(&.key_name, list_of_keys) |
У нашому випадку, ми хочемо отримати значення за ключами “b” та “c”. Тому наш вираз буде наступним:
1 |
map(&.b, ["b", "c"]) |
Цей вираз дозволить нам отримати список значень за ключами “b” та “c” із наших даних.
JMESPath є потужним інструментом для роботи з JSON даними, який дозволяє здійснювати різноманітні операції фільтрації та обробки даних. У цій статті ми розглянули, як ефективно використовувати JMESPath для отримання значень за ключами в списку. Цей інструмент може бути особливо корисним при обробці великих обсягів даних, де потрібно здійснювати швидкий та ефективний пошук та фільтрацію.