
Инструментът за черупки jq е страхотен за работа с JSON-данни. Той също така може да трансформира тези данни в удобни CSV-файлове, готови за всички ваши нужди от електронни таблици.
jq
е отличен малък инструмент, който живее във вашия терминал и прави полезни неща с JSON-данни. Това е мощен инструмент, но полезен и за малките неща. Например, ако прехвърлите JSON данни към него, той ги отпечатва с подчертаване на синтаксиса? по подразбиране:
$ cat some-data.json|jq
Можете да инсталирате jq на повечето системи. ( brew install jq
на Mac с homebrew / chocolatey install jq
на прозорци с шоколад). Тази публикация представя по-усъвършенствана jq
техника. Ако искате да получите основите, трябва да разгледате урока.
jq
работи с всеки JSON източник. Тъй като прекарвам по-голямата част от дните си в работа с базирани на Sanity.io, ще използвам това като пример. Също така, защото мисля, че е изключително готино какво можем да направим с тази комбинация.
Sanity е бекенд за структурирано съдържание и се предлага с API в реално време и език за заявки, наречен GROQ. Можете да взаимодействате с Sanity чрез HTTP и JS / PHP клиенти, но също и с инструмента CLI с $ sanity documents query 'GROQ-expression'
.

Така че, ако искате вашите документи от типа post
, вие поставяте $ sanity documents query '*[_type == "post"]'
. Или ако просто искате тези с дата на публикуване през 2018 г., това е $ sanity documents query '*[_type == "post" && publishedAt > "2018-01-01
"]". Тази заявка ви дава цели документи. Ако просто искате заглавията и да публикувате дати, ще напишете e: *[_type == "post"]{title, published
At}.

Можете също така да изберете ключове и стойности от JSON данни jq
. Днес ще го използваме, за да трансформираме структурирано съдържание в JSON масив в CSV файл. Защото шефът ви иска неща в листове на Excel, нали? Седнете здраво и нека се потопим! ?
Да предположим, че искате списък със заглавията на вашите записи в блога и охлюви и да публикувате дати в електронна таблица. Целият израз би изглеждал така:
sanity documents query '*[_type == "post"]{title, "slug": slug.current, publishedAt}'|jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
Можете да копирате това и да стартирате с него или да играете с него на jqplay.com, но нека видим какво се случва в jq
-expression:
-r
е за--raw-ouput
и гарантира, че изходът е обикновен стар скучен текст без цветове или специално форматиране.(map(keys) | add | unique) as $cols
итерации (map
) чрез ключовете във вашия обект иadd
Sunique
такива, за да променлива с име$cols
. С други думи, така се правят заглавките на колоните ви.

map(. as $row | $cols | map($row[.])) as $rows
взема всички обекти във външния масив и прелиства през всички ключове на обекта (заглавие, плъзгач, publishedAt). Той добавя стойностите към масив, който ви дава масив от масиви със стойностите, което искате, когато трансформирате JSON в CSV.$cols, $rows[] | @csv
поставя заглавките на колоните първо в масива и след това всеки от масивите, които се трансформират в редове, като ги пренасочват@csv
, което форматира изхода като ... csv.

Тази команда отпечатва резултата в черупката. Ако искате да го напишете директно във файл, можете да добавите > filename.
csv към него или, например, в клипборда ( to | pbc
прехвърлете го opy, ако сте на macOS). Или може би ще направите нещо вълнуващо с csv в панди ?? в Python?
Ако сметнете това за полезно, ще се радваме да чуем всичко за него в раздела за коментари!
Ако искате да изпробвате Sanity.io, можете да отидете на sanity.io/freecodecamp и да получите актуализиран безплатен план за разработчици. ✨
Първоначално публикувано на sanity.io.