<p>httpie рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ json рдлрд╝реАрд▓реНрдб рдСрд░реНрдбрд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЬрдире░ 2016  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: httpie/httpie

рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдореИрдВ httpie рдХреЛ рдЬреЗрд╕рди рдлрд╝реАрд▓реНрдб рдСрд░реНрдбрд░ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

curl -i http://localhost:8080/v1/notes/569766aed4c661fba8d85a12

{
  "id": "569766aed4c661fba8d85a12",
  "content": "hi"
}

httpie . рдХреЗ рд╕рд╛рде

http get :8080/v1/notes/569766aed4c661fba8d85a12 

{
  "content": "hi",
  "id": "569766aed4c661fba8d85a12"
}

рдореИрдВ рд╣рдореЗрд╢рд╛ рдкреНрд░рдердо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП id рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб JSON рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдордп рдЦреЛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреНрдпреЛрдВ рднреЗрдЬ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдорд╛рди рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ JSON рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рднреА рд╕рд╛рд░реНрдердХ рд╣реИ? рд╕рд░реНрд╡рд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрдЬрд╛рдп 90% рд╕рдордп рдпрд╣ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рд╕рддреНрдп" рдХреЛ "рдЧрд▓рдд" рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред

рд╕рднреА 27 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреЛрдВрд╕ рдлреЙрд░реНрдореЗрдЯрд░ рдореЗрдВ, Sort_keys=True
рдХреЛрдИ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рдХрд╛рд░рдг рд╣реЛрдЧрд╛

рдЖрд╣ рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдореИрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдЫрд╛рдВрдЯрдирд╛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдиреА рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ)

http --pretty=colors get :8080/v1/notes/569766aed4c661fba8d85a12

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧреАрд▓рд╛рдкрди рдХрд╛ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реИ, рдЫрдБрдЯрд╛рдИ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рд░рдВрдЧреЛрдВ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЫрд╛рдБрдЯрдиреЗ рдХреЗ рдмрд┐рдирд╛ --pretty рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореВрд▓реНрдп рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рдХреНрдпрд╛ рдЖрдк рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП --sort-keys рдЬреИрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рд╕реЙрд░реНрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ; рджреЗрдЦреЗрдВ https://bugs.python.org/issue21650 json.tool рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА python3 рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ

тЮ╕ python3 -m json.tool -h
usage: python -m json.tool [-h] [--sort-keys] [infile] [outfile]

A simple command line interface for json module to validate and pretty-print
JSON objects.

positional arguments:
  infile       a JSON file to be validated or pretty-printed
  outfile      write the output of infile to outfile

optional arguments:
  -h, --help   show this help message and exit
  --sort-keys  sort the output of dictionaries alphabetically by key

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб JSON рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдордп рдЦреЛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреНрдпреЛрдВ рднреЗрдЬ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдорд╛рди рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ JSON рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рднреА рд╕рд╛рд░реНрдердХ рд╣реИ? рд╕рд░реНрд╡рд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрдЬрд╛рдп 90% рд╕рдордп рдпрд╣ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рд╕рддреНрдп" рдХреЛ "рдЧрд▓рдд" рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред

@carlfish . рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реИрдВ

@jkbrzt рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдлреЙрд░реНрдореЗрдЯрд░ рдХреЛ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреНрд░рдо рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╢рдмреНрджрдХреЛрд╢ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рд╢рд╛рдпрдж рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╢рдмреНрджрдХреЛрд╢ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ?

рд╣рд╛рдБ, рдЕрдЬрдЧрд░ json.loads рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддрд╛рдирд╛рд╢рд╛рд╣реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреНрд░рдо (рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрд╢ рдХреЛрдб) рд╣реИ, рдЬреЛ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ;

рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреГрдкрдпрд╛ object_pairs_hook=OrderedDict рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рдФрд░ json.dumps . рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп json.dumps sort_keys рдбреНрд░реЙрдк рдХрд░реЗрдВ

>>> import json
>>> from collections import OrderedDict
>>> data = json.loads('{"foo":1, "bar": 2}', object_pairs_hook=OrderedDict)
>>> print json.dumps(data, indent=4)
{
    "foo": 1,
    "bar": 2
}
>>> 

рджреЛ рдореБрдВрдбрд╛ рдпрд╛рдХ рдмрд╛рдж рдореЗрдВ: рдкреБрд▓ рдЕрдиреБрд░реЛрдз -> https://github.com/jkbrzt/httpie/pull/520

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ JSON рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рдЙрд╕ рдСрд░реНрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдореИрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдЬрд┐рд╕ рдХреБрдВрдЬреА рдХреА рдЙрдореНрдореАрдж рд╣реИ рд╡рд╣ JSON рдмреЙрдбреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рди рд╣рдЯрд╛рдПрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдзреНрд╡рдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдпрд╛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВред

рдкрд┐рдВрдЧ рд▓реЗрдЦрдХ @jakubroztocil рдХреНрдпрд╛ рдпрд╣ рд░рдЦрд░рдЦрд╛рд╡ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ?

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдХрд░реНрд╖рдг рд╣реИ? @carlfish рдХреА рддрд░рд╣, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╢рд░реНрдордирд╛рдХ рд░реВрдк рд╕реЗ рд▓рдВрдмрд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ httpie рдореБрджреНрджрд╛ рдерд╛ред

рдпрд╣ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреБрди: рдХреНрд░рдорд┐рдд/рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдЧрд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛ред

рдкреАрдЖрд░ #520 рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрднреА рддрдХ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЬрдм рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЫрдБрдЯрд╛рдИ рдХрд░рдирд╛ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдВрдкреВрд░реНрдг Python2 рдкрджрд╛рд╡рдирдд; рдХреБрдЫ рдЕрдиреБрд░рдХреНрд╖рдХ рд▓рдВрдмрд┐рдд рдкреАрдЖрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рд░реЗрдЦрд╛рдВрдХрди рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @jakubroztocil @msabramo рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдХреЗ рд╣рд▓ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@opensas рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди jq рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

http https://jsonplaceholder.typicode.com/todos/1 | jq -C

@opensas рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧрд╛рдореА v2.2.0.1 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди jq рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

http https://jsonplaceholder.typicode.com/todos/1 | jq -C

@nmtitov рдпрд╣рд╛рдБ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ jq рдирд╣реАрдВ рд╣реИ рдЬреЛ рдСрд░реНрдбрд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд░рдВрдЧ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ (рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ --pretty=none рд╕реЗрдЯ рдХрд░рдирд╛)ред

рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ jq рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдЬрд╛рдирдХрд╛рд░реА (рд╕реНрдерд┐рддрд┐ рдФрд░ рд╢реАрд░реНрд╖рд▓реЗрдЦ) рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, httpie рдЗрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 109
Content-Type: application/json; charset=utf-8
Date: Sat, 25 Apr 2020 11:14:32 GMT
ETag: W/"6d-wWZh31xOzPgYyzU23ihgZaW8KkI"
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

[
    {
        "id": 1,
        "text": "Read the docs"
    },
    {
        "id": 2,
        "text": "Create my first application"
    },
    {
        "id": 3,
        "text": "Write tests"
    }
]

рд▓реЗрдХрд┐рди рдПрдЪрдЯреАрдЯреАрдкреА | jq -C рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╕реНрдЯреНрд░рд┐рдк рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд▓реМрдЯрддрд╛ рд╣реИ:

[
  {
    "id": 1,
    "text": "Read the docs"
  },
  {
    "id": 2,
    "text": "Create my first application"
  },
  {
    "id": 3,
    "text": "Write tests"
  }
]

@opensas рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рддрдм рддрдХ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдмреИрд╢ рд░реИрдкрд░ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ

@opensas @nmtitov рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ --print=hb (рдкреНрд░рд┐рдВрдЯ рд╣реЗрдбрд░ рдФрд░ рдмреЙрдбреА) рдХреЛ --print=b рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдмреЙрдбреА рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ ) рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЗрдбрд░ рдХреЛ --print=hb рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред

https://httpie.org/docs#output -options

@jakubroztocil рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ jq рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ JSON рдмреЙрдбреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ

$ http --print=hb https://jsonplaceholder.typicode.com/todos/1 | jq -C
parse error: Invalid numeric literal at line 1, column 9

рд╕рдордЭрд╛ред рдЖрдк http --download httpbin.org/get | jq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛, httpie рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рдХрд░реНрд▓реА рдорд┐рд▓рд╛, рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:

рдХрд░реНрд▓ рдХреА рддрд░рд╣ рд▓реЗрдХрд┐рди httpie рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣реЗрдбрд░ рд╕реНрдЯрдбрдЖрдЙрдЯ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрдбрд░ рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рддреЛ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

$ curlie GET localhost:3000/tasks | jq -C
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 304
ETag: W/"130-ED1W4hQo1i7na7wy5Ewc7iKdoJc"
Date: Wed, 27 May 2020 06:28:26 GMT
Connection: keep-alive

[
  {
    "id": 2,
    "title": "new task2",
    "description": "description2",
    "status": "OPEN"
  },
  {
    "id": 3,
    "title": "new task3",
    "description": "description3",
    "status": "OPEN"
  }
]

рдЬрд╣рд╛рдВ httpie рдХреЗ рд╕рд╛рде рдореИрдВ рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╣реЛрдЧрд╛

BTW, рдореИрдВрдиреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ:

$ cat ~/bin/c
curlie "$@" | jq -C

рдЕрднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ v2.2.0 рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдирдП --unsorted , --sorted рдФрд░ --format-options рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдЬрд╛рдиреЗрдВ:

https://httpie.org/docs#colors -and-formatting

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jclem picture jclem  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rshurts picture rshurts  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hrj picture hrj  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pyvotal-cguers picture pyvotal-cguers  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

a-x- picture a-x-  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ