Мы все иногда сталкиваемся с необходимостью вытащить нужную информацию из JSON или YAML файлов. Многие уже познакомились с мощью утилиты jq. Судя по публикациям на Хабре, напр. https://habr.com/ru/post/525808/, и вопросам в qna, тема до сих пор актуальна.
Мне в очередной раз пришлось вспомнить специфический DSL jq чтобы восстановить накопленные за долгое время закладки в Хроме, не сохранённые при апгрейде. Точнее, файл Bookmarks в формате .json сохранился, но ни в какую не хотел импортироваться в новый Хром. Хочу поделиться рецептом решения этой проблемы, заодно упорядочить собранные в разных местах миниатюрные скрипты для решения похожих проблем.
JQ в действительности полноценный язык программирования со всеми атрибутами - переменными, типами данных, арифметикой, циклами и условными переходами, массой встроенных функций и возможностью добавления новых. Удивительно, всё это в программке размером 30KB, страницей "man jq" такого же размера и библиотекой libjq размером 300KB.
Итак, заглянув в свой Bookmarks с несколькими сотнями ссылок, первый вопрос - какова структура этого .json файла? По счастью, я уже знал как быстро её посмотреть и использовать в дальнейших запросах. Вот эта команда:
... $ jq '[paths|join(".")]' Bookmarks|head -n 16 [ "checksum", "roots", "roots.bookmark_bar", "roots.bookmark_bar.children", "roots.bookmark_bar.children.0", "roots.bookmark_bar.children.0.children", "roots.bookmark_bar.children.0.children.0", "roots.bookmark_bar.children.0.children.0.children", "roots.bookmark_bar.children.0.children.0.children.0", "roots.bookmark_bar.children.0.children.0.children.0.date_added", "roots.bookmark_bar.children.0.children.0.children.0.guid", "roots.bookmark_bar.children.0.children.0.children.0.id", "roots.bookmark_bar.children.0.children.0.children.0.name", "roots.bookmark_bar.children.0.children.0.children.0.type", "roots.bookmark_bar.children.0.children.0.children.0.url",