Pull to refresh

Fx — мощная JavaScript альтернатива jq для JSON

Level of difficultyEasy
Reading time4 min
Views5.3K

Введение

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

Появился FX — неинтерактивная, основанная на JavaScript альтернатива JQ, которая обещает стать переломным моментом. В этой статье блога вы окунетесь в мир FX и узнаете, как его можно использовать для упрощения задач обработки JSON.

Ключевые преимущества FX перед JQ

Вот некоторые задачи, которые FX может выполнить, но не может выполнить JQ:

  1. Поддержка больших целых чисел.

FX может работать с большими целыми числами благодаря поддержке BigInt в JavaScript. Эта функция отсутствует в JQ:

echo 12345678901234567890 | deno run -A npm:fx
  1. Промисы.

FX может легко работать с обещаниями, обеспечивая асинхронную обработку данных. Это может быть особенно полезно при получении данных из URL:

echo ''https://medv.io/*'' | npx fx 'fetch' '.text()'
  1. Комментарии и запятые в JSON.

FX может обрабатывать данные JSON с комментариями и запятыми, чего не может делать JQ:

echo '[1,/* trailing comma */]'' | deno run -A npm:fx
  1. Знакомый синтаксис JavaScript.

FX использует знакомый синтаксис и функции JavaScript, что облегчает разработчикам работу с данными JSON без необходимости постоянно искать синтаксис, специфичный для JQ.

Что такое FX?

FX, сокращение от Function eXecution или f(x), — это мощный, неинтерактивный процессор JSON, который использует JavaScript для обеспечения более интуитивного и гибкого опыта работы с данными JSON. С FX вы можете использовать знакомый синтаксис JavaScript и функции для обработки JSON, что делает его более простым в освоении и использовании.

Начало работы с FX

Установить FX очень просто, достаточно выполнить следующую команду:

npm i -g fx

В качестве альтернативы можно использовать npx или даже запустить его с помощью Node или Deno:

cat file.json | npx fx .field

Использование FX

FX рассматривает аргументы как функции JavaScript, передавая входные данные в первую функцию и затем передавая результаты в каждую следующую функцию. Например:

echo '{"name": "world"}'' | fx 'x => x.name' 'x => `Hello, ${x}!`'

Вы можете еще больше упростить синтаксис, используя ключевое слово this:

echo '{"name": "world"}' | fx '.name' '``Здравствуйте, ${this}!``

И, конечно, вы можете использовать любую функцию JavaScript для обработки данных:

echo '{"name": "world"}'' | fx 'Object.keys'

Расширенное использование

FX может обрабатывать поток объектов JSON, применяя аргументы к каждому объекту:

echo '{"name": "hello"}\n{"name": "world"}' | fx '.name'

Чтобы обработать поток объектов JSON как единый массив, используйте флаг --slurp или -s:

echo '{"name": "hello"}\n{"name": "world"}' | fx --slurp '.map(x => x.name) ' '.join(", ")

Для не-JSON данных используйте флаг --raw или -r:

ls | fx -r '[this, this.includes(".md")]''

Комбинация флагов --raw и --slurp позволяет работать с массивом строк:

ls | fx -rs '.filter(x => x.includes(".md"))''

FX также поддерживает пропуск печати результатов с помощью символа skip:

ls | fx -r '.includes(".md") ? this : skip'

Из коробки FX поставляется с такими полезными функциями, как uniq, sort и groupBy:

cat file.json | fx 'uniq' 'sort' 'groupBy(x => x.name)'

FX также легко работает с обещаниями:

echo ''https://medv.io/*'' | fx 'fetch' '.text()'

Синтаксический сахар

FX предлагает сахар для таких распространенных функций, как map:

curl https://api.github.com/repos/antonmedv/fx/commits | fx 'map(.commit.message)'
echo '[{"name": "world"}]'' | fx 'map(`Hello, ${x.name}!`)'

Он также предоставляет специальный синтаксис для функции flatMap:

curl https://api.github.com/repos/kubernetes/kubernetes/issues | fx '.[].labels[].name'

Почему стоит выбрать FX, а не JQ?

Хотя JQ был основным выбором для обработки JSON, FX дает несколько преимуществ:

  1. Знакомство: FX использует синтаксис и функции JavaScript, что делает его простым в изучении и использовании для разработчиков, уже владеющих JavaScript.

  2. Гибкость: FX позволяет выполнять более сложные и гибкие манипуляции с данными благодаря возможностям JavaScript.

  3. Поддержка BigInt: FX поддерживает BigInt, что отсутствует в JQ.

  4. Комментарии и запятые в JSON: FX обрабатывает JSON с комментариями и запятыми, в отличие от JQ.

  5. Поддержка обещаний: FX легко работает с обещаниями, обеспечивая асинхронную обработку.

Заключение

FX — это мощная и гибкая альтернатива JQ, использующая возможности JavaScript для работы с JSON. Благодаря знакомому синтаксису, расширенным возможностям и простоте использования, FX может быстро стать вашим основным инструментом для обработки данных JSON. Попрощайтесь с постоянным поиском в Гугле синтаксиса JQ и борьбой с его ограничениями. Попробуйте FX и упростите свои задачи по обработке JSON уже сегодня!

Tags:
Hubs:
Total votes 12: ↑8 and ↓4+4
Comments8

Articles