Каждый, кто работал с JSON, знает, насколько этот формат проще и удобнее, чем XML, но при этом гибче, чем, например, CSV. Утилита под названием jq — отличный инструмент, который выводит работу JSON на принципиально новый уровень: с ней, чтобы перебрать массив данных, не нужно писать никаких скриптов — хватит запроса наподобие SQL.

Для установки jq достаточно скачать исполняемый файл — есть версии для Windows, macOS и Linux. Подобно grep, sed, awk и похожим утилитам из арсенала юниксоида, jq просто принимает данные на вход и выводит результаты в stdout. К примеру, чтобы прочитать и вывести данные из файла data.json в UNIX-подобных системах, надо написать

cat data.json | jq '.'

В одинарных кавычках содержатся инструкции jq (в данном случае — точка, то есть вывод всех данных). Эти инструкции пишут на языке, который предназначен специально для фильтрации и преобразования JSON.

Для упражнения я взял массив данных, который мы собирали, готовя тему номера «Секреты даркнета». В этом файле содержится четыре с лишним тысячи ссылок на теневые ресурсы и для каждой прописаны категория, URL, заголовок и количество входящих ссылок с других сайтов в .onion.

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


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

5 комментариев

  1. rio

    12.09.2017 at 09:59

    Побольше бы примеров

  2. icoz

    13.09.2017 at 11:39

    Согласен. Хотя бы пару слов о самом языке запросов. Пару примеров…

    • Андрей Письменный

      Андрей Письменный

      14.09.2017 at 11:04

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

      А вообще открываете мануал, и там в конце описания каждой функции можно раскрыть пример ее использования.

  3. jokyboy

    06.10.2017 at 14:49

    Ребята, подскажите, есть ли вообще какое-то решение, которое может пройтись по всему массиву ссылок и найти там определённые слова в заголовках?

    • Андрей Письменный

      Андрей Письменный

      11.10.2017 at 13:10

      jokyboy, если вы там не весь интернет индексируете, то можно взять curl и просто скачать все страницы по списку, а потом сколько угодно искать в них. Ну или написать три строчки на любом современном языке. Тот же Python и urllib2 или requests отлично подойдут.

Оставить мнение