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

Ссылки