web-dev-qa-db-fra.com

Comment combiner la séquence d'objets en jq en un seul objet?

Je voudrais convertir le flux d'objets:

{
  "a": "green",
  "b": "white"
}
{
  "a": "red",
  "c": "purple"
}

en un seul objet:

{
  "a": "red",
  "b": "white",
  "c": "purple"
}

De plus, comment puis-je encapsuler la même séquence dans un tableau?

[
    {
      "a": "green",
      "b": "white"
    },
    {
      "a": "red",
      "c": "purple"
    }
]

Malheureusement, le manuel manque sérieusement d'exhaustivité, et Google ne trouve pas non plus les réponses.

39
Jennifer M.

Si votre entrée est un flux d'objets, à moins que votre jq n'ait inputs, les objets doivent être "slurpés", par ex. en utilisant l'option de ligne de commande -s, afin de les combiner.

Ainsi, une façon de combiner des objets dans le flux d'entrée est d'utiliser:

jq -s add

Pour le deuxième problème, créer un tableau:

jq -s .

Il existe bien sûr d'autres alternatives, mais elles sont simples et ne nécessitent pas la version la plus récente de jq. Avec jq 1.5 et versions ultérieures, vous pouvez utiliser des `` entrées '', par ex. jq -n '[inputs]'

53
peak

Une alternative au slurping à l'aide de l'option de ligne de commande -s consiste à utiliser le filtre inputs. Ainsi:

jq -n '[inputs] | add'

Cela produira un objet avec tous les objets d'entrée combinés.

9
Evgeny