jo
jo — конструктор json для командной строки.
Часто вижу, как коллеги в чатах перекидываются фрагментами запросов или
примерами вызовов API, передавая json в виде экранированных строк.
Выглядит это примерно так:
curl \
-X POST \
-H "Content-Type: application/json" \
-d "{\"foo\": {\"bar\": \"baz\"}}" \
https://httpbin.org/post
Замена внешних кавычек на одинарные здесь не является решением. Примеры таких
запросов генерируются http-клиентом при отладке. Вывод копируется
и отправляется в чат.
Выглядит это страшно и нечитаемо. Поправить такой json с первого раза без
ошибки сложно (невозможно).
Для простоты генерации и редактирования json из командной строки
используйте jo:
jo foo=$(jo bar=baz) | jq
Инструмент позволяет создавать json “на ходу” и передавать его дальше на
обработку по конвейеру:
jo foo=$(jo bar=baz) |
curl \
-X POST \
-H "Content-Type: application/json" \
-d @- \
https://httpbin.org/post
jo можно использовать совместно с grpcurl:
jo f_string=foo f_int64=42 |
grpcurl \
-d @ \
grpcb.in:9001 \
grpcbin.GRPCBin.DummyUnary |
jq
Примеры
# int
jo foo=1 bar=2 | jq
# string
jo foo=faz bar=baz | jq
# nested
jo this=$(jo is=$(jo nested=json)) | jq
# bool
jo ok=true err=false | jq
# array
jo -p -a foo bar baz | jq