Afficher la sortie curl au format JSON lisible dans le script shell Unix

215

Dans mon script shell Unix, lorsque j'exécute une commande curl, le résultat sera affiché comme ci-dessous que je redirige vers le fichier:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

Mais, je veux que cette sortie mette au format JSON lisible comme ci-dessous dans le fichier:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

Comment formater la sortie de cette façon?

Confitures
la source

Réponses:

537

Essayez de faire ceci:

curl ... | json_pp 

ou avec en utilisant le filtre d'identité:

curl ... | jq '.'

entrez la description de l'image ici

ou avec et :

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

Vérifiez https://stedolan.github.io/jq/

Gilles Quenot
la source
pouvez-vous être un peu détaillé ici s'il vous plaît
Jams
1
json_ppsemble formater les données dans l'ordre inverse de celui attendu. Existe-t-il un moyen d'annuler les données?
Antonio
1
json_pp est un utilitaire de commande Perl qui convertit entre certains formats d'entrée et de sortie (l'un d'eux JSON). Le format d'entrée par défaut est json et le format de sortie par défaut est json avec une jolie option.
Fabijan Bajo
3
la solution pipe to json_pp est si élégante. merci
andy
1
Le tuyau dans le nœud est très élégant. Merci!
Matthew Zackschewski
53

Je suppose que vous voulez embellir la sortie JSON. Cela pourrait être réalisé en utilisant python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json
0xbb
la source
Merci de répondre. Mais je n'utilise pas Python, j'utilise shell. pouvez-vous me guider sur le shell
Jams
@Jams qui exécute python à partir du shell, ce qui donne une jolie sortie imprimée.
agconti
Excellente solution car python est préinstallé.
Gayan Weerakutti
1
Ce script python donne une erreur "pipe cassée" lorsque j'y ajoute un "| head".
Crouching Kitten
@CrouchingKitten Je ne vois pas ce problème moi-même (peut-être des versions différentes), mais cela peut être dû à la headcommande coupant la sortie qui lui est acheminée avant d'atteindre la fin, "cassant" ainsi le tuyau. Si vous autorisez headà consommer l'intégralité du flux de données du canal, je m'attends à ce que l'erreur ne s'affiche pas.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

peut également aider.

Vishnu
la source
12

Ceci est à ajouter à la réponse de Gilles. Il existe de nombreuses façons de le faire, mais personnellement, je préfère quelque chose de léger, facile à retenir et universellement disponible (par exemple, livré avec des installations LTS standard de votre saveur Linux préférée ou faciles à installer) sur les systèmes communs * nix.

Voici les options dans leur ordre préféré:

Module Python Json.tool

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

avantages: presque disponibles partout; inconvénients: pas de code couleur


jq (peut nécessiter une installation unique)

echo '{"foo": "lorem", "bar": "ipsum"}' | jq

inconvénients: doit installer jq; avantages: codage couleur et polyvalent


json_pp (disponible dans Ubuntu 16.04 LTS)

echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp

Pour les utilisateurs Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Zhenhua
la source
Merci @zhenhua! J'ai utilisé cat myFile.json | python -mjson.tool >> myFilePretty.jsonpuis ouvert dans mon éditeur (vim, ne déteste pas) et j'ai obtenu des couleurs.
essa
11

Vous pouvez utiliser ce module de nœud

[sudo] npm i -g json; // suggère de ne pas utiliser le privilège root pour installer le module de noeud

puis ajoutez simplement |jsonaprès la boucle. curl http://localhost:8880/test.json |json

NanoNova
la source
8

J'ai trouvé que json_reformat était très pratique. Je viens donc de faire ce qui suit:

curl http://127.0.0.1:5000/people/api.json | json_reformat

c'est tout!

Raptor
la source
Si vous utilisez Ubuntu, vous pouvez trouver json_reformat dans le package yajl-tools.
Kevin
5

Découvrez curljson

$ pip install curljson
$ curljson -i <the-json-api-url>
mitnk
la source
1

Motivation: vous souhaitez imprimer la réponse JSON de prettify après la demande de commande curl.

Solution : json_pp - outil de ligne de commande qui convertit entre certains formats d'entrée et de sortie (l'un d'eux est JSON). Ce programme a été copié de json_xs et modifié. Le format d'entrée par défaut est json et le format de sortie par défaut est json avec une jolie option.

Synposis : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Formule :<someCommand> | json_pp

Exemple :

Demande

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

Réponse

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
avivamg
la source