3 votes

Agréger cinq objets individuels pour obtenir la sortie souhaitée à l'aide de jq

J'ai pu transformer les données mais je n'obtiens pas le résultat souhaité.

(ce que j'ai essayé) :

[inputs | {author , totalpages : .pages , books : [{"title": .title, "year" : .year }] } ] | sort

Entrée :

{"title":"War of the worlds","author":"H G Wells","year":1896,"pages":203}
{"title":"The invisible man","author":"H G Wells","year":1895,"pages":2136}
{"title":"The Lost World","author":"A C Doyle","year":1912,"pages":185}
{"title":"A Study in Scarlet","author":"A C Doyle","year":1887,"pages":251}
{"title":"20,000 leagues under the sea","author":"J Verne","year":1870,"pages":450}

devrait l'être :

{
  "author": "A C Doyle",
  "totalpages": 436,
  "books": [
    {
      "title": "The Lost World",
      "year": 1912
    },
    {
      "title": "A Study in Scarlet",
      "year": 1887
    }
  ]
}
{
  "author": "H G Wells",
  "totalpages": 2339,
  "books": [
    {
      "title": "War of the worlds",
      "year": 1896
    },
    {
      "title": "The invisible man",
      "year": 1895
    }
  ]
}
{
  "author": "J Verne",
  "totalpages": 450,
  "books": [
    {
      "title": "20,000 leagues under the sea",
      "year": 1870
    }
  ]
}

2voto

Inian Points 36223

Il suffit d'une série de transformations, en commençant par group_by()

jq -n '
[ inputs ] | 
group_by(.author) | 
map
( 
  { 
    author: .[0].author, 
    totalpages: ( map(.pages) | add ), 
    books: ( map( { title, year } ) ) 
  }
)'

jqplay - démo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X