Récupérer des données json avec jq script shell [Résolu]

A voir également:Récupérer des données json avec jq script shellRécupérer données json javascript ✓ - Forum - Javascript Récupérer deux données d'un fichier json ✓ - Forum - Javascript AngularJs : récupération de donnée via un json ✓ - Forum - Javascript Script shell récupérer ligne de commande ✓ - Forum - Shell Executer un script shell - Conseils pratiques - Shell

Bonjour,

j'aimerais récupérer certaines informations du fichier json situé sur le site
http://api.nobelprize.org/v1/prize.json

ici j'arrive à voir le fichier avec le bon format. Beaucoup plus lisible

#!/bin/sh  curl -s 'http://api.nobelprize.org/v1/prize.json' | jq '.'


mais je ne comprend pas trop comment récupérer des infos

j'ai testé :
curl -s 'http://api.nobelprize.org/v1/prize.json' | jq '.year'    for i in json[]; do     curl -s 'http://api.nobelprize.org/v1/prize.json' | jq '.laureates[0] | {firstname, surname}' done



curl -s 'http://api.nobelprize.org/v1/prize.json' | jq '.laureates[0].firstname'


j'ai besoin d'avoir les noms des lauréats à une certaine année et dans une certaine catégorie

par exemple les noms et prénoms des lauréats en physics de l'année 2005
dans 77
year "2005"
category "physics"
laureates
0
id "791"
firstname "Roy J."
surname "Glauber"


mes parmi tous mes tests je ne reçois que des NULL

quelqu'un aurait une idée pour me mettre dans le bon chemin pour que je comprenne le principe?

merci beaucoup




Configuration: Linux / Firefox 60.0

Forum

A voir également:Récupérer des données json avec jq script shellRécupérer données json javascript ✓ - Forum - Javascript Récupérer deux données d'un fichier json ✓ - Forum - Javascript AngularJs : récupération de donnée via un json ✓ - Forum - Javascript Script shell récupérer ligne de commande ✓ - Forum - Shell Executer un script shell - Conseils pratiques - Shell

Web: www.shapebootstrap.net

5 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

s'il te plaît, utilise les balises CODE !
sans ça, on perd en lisibilité.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

wget -qO - 'http://api.nobelprize.org/v1/prize.json'  | jq --raw-output --arg Y 2005 --arg C physics '.prizes[]|select( .year == $Y and .category == $C )|"\(.year)"+" "+"\(.laureates[].surname)"'

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Merci beaucoup lEprofSonDkon !
je vais regarder le tout et je reviens!
:):)

Reply
réponses:
  • auteur

    Bonsoir lEprofSonDkon :)

    Je comprend bien ce que tu m'as envoyé! merci !

    Par contre, je ne réussi pas à avoir tous les firstname suivie des surname...

    wget -qO - 'http://api.nobelprize.org/v1/prize.json' | jq --raw-output --arg Y $1 --arg C $2 '.prizes[]|select( .year == $Y and .category == $C ) | "\(.laureates[].firstname , .surname)" '


    et ici ils sont tous frères et sœurs!
    wget -qO - 'http://api.nobelprize.org/v1/prize.json' | jq --raw-output --arg Y $1 --arg C $2 '.prizes[]|select( .year == $Y and .category == $C )     | "\(.laureates[].firstname)"+" "+"\(.laureates[].surname)"' >&2


    j'ai essaie plein d'autres combinaisons... mais rien!

    J'ai aussi une autre question, il y a t-il une explication du pourquoi si je mets au départ de mon script annee="$1" et categorie="$2" 'a la place de $1 et $2 ça ne fonctionne pas?

    curiosité, pourquoi wget et pas curl ?

    merci infiniment pour ta patience et de ton aide précieux!!

  • auteur

    LES BALISES CODES !!!
    c'est pénible.

  • auteur

    merci pour les balises code.

    j'ai cherché (#STFW), et j'ai trouvé cette manière de faire :

    jq --raw-output --arg Y 2005 --arg C physics '.prizes[]|select( .year == $Y and .category == $C ) | .year as $year | .laureates[] | $year+", "+.surname+", "+.firstname'


    wget
    ,
    curl
    ...
    wget
    par habitude (et ça me paraît plus simple)
    curl
    permet des actions plus complexes, il me semble, dont je n'ai que très rarement besoin.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Merci beaucoup encore et encore lEprofSonDkon !
Tu es vraiment de grand aide!
Ça fonctionne super bien!
vu que je ne voulais que nom et prénom j'ai un peu modifié

wget -qO - 'http://api.nobelprize.org/v1/prize.json' | jq --raw-output --arg annee "$1" --arg categorie "$2" '.prizes[]|select( .year == $annee and .category == $categorie ) | .laureates[] | .firstname+", "+.surname'

j'ai juste une petite question avant de mettre à résolu si c'est possible :)
pour ma compréhension..
dans jq --raw-output --arg Y 2005 --arg C physics '.prizes[]|select( .year == $Y and .category == $C ) | .year as $year | .laureates[] | $year+", "+.surname+", "+.firstname'
dans le select on initialise le .year et category mais après pourquoi on pipe ça à ... .year as $year
je n'arrive pas trop à comprendre son rôle ... ou c'est juste le chemin pour choisir la bonne année? dans ma version je ne l'utilise pas parce que je n'avais pas besoin d'avoir l'année mais bon, j'aimerais comprendre pareil! :) Merci beaucoup !

Reply
réponses:
  • auteur

    si tu ne t'en sers pas, tu n'as pas à laisser cette partie.

    ce que j'ai compris, c'est qu'on ne peut pas remonter dans la structure d'un fichier JSON.
    ainsi, ça enregistre "au passage" une donnée pour la restituer plus tard.

    LES BALISES CODE !!!! je me suis encore foulé la cornée à distinguer le code du texte. :(

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Vraiment désolé! je n'y pense pas dans la foulée ! je m'excuse
je vais me mettre une note sur l'écran! je regarde mon message et moi aussi j'ai du mal à faire la différence...
gloups!

Merci pour l'explication lEprofSonDkon :):)

Je vais mettre résolu
Bonne journée !

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed