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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Введение

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 https://fx.wtf
  1. Промисы

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

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

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

echo '[1,/* trailing comma */]'' | deno run https://fx.wtf
  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
cat file.json | node <(curl -s https://fx.wtf) .field
cat file.json | deno run https://fx.wtf .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 уже сегодня!

Источник: https://habr.com/ru/articles/730442/


Интересные статьи

Интересные статьи

В одном из проектов возникла необходимость перевести процессы импорта данных сторонних систем на микросервисную архитектуру. В качестве инструмента выбран Apache NiFi. В качестве первого ...
Привет, Хабр! Представляю вашему вниманию перевод статьи «The real reason why JavaScript has arrow functions» автора Martin Novák. * фраза-мем из игры Skyrim Читать д...
Доброго времени суток, друзья! Представляю вашему вниманию список из первых 100 вопросов по основам JavaScript из этого репозитория с краткими ответами и ссылками на «Современн...
В этой статье я опишу процесс создания сервера с gRPC и RESTful JSON API одновременно и Swagger документацию к нему. Эта статья — продолжение разбора различных способов реализаций API-сервера н...
В связи с массовым переходом на удалённую работу приложение для видеоконференций Zoom резко выросло в популярности. Но это не идеальный вариант с точки зрения безопасности. Хотя Zoom предлагает e...