Объедините пять отдельных объектов в желаемый результат, используя jq

Я смог преобразовать данные, но не получил желаемого результата

фильтр (который я пробовал):

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

Вход :

{"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}

вывод должен быть:

{
  "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
    }
  ]
}
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
3
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Требуется всего лишь серия трансформаций, начиная с group_by()

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

jqplay - демо

jq -n '[ inputs ] | ...' также может быть записано как jq -s '...'
ikegami 26.12.2020 16:57

Другие вопросы по теме