web-dev-qa-db-fra.com

Comment filtrer un tableau d'objets JSON avec jq?

J'ai l'entrée JSON suivante:

{
  "zk_kafka": [
    {
      "InstanceType": "t2.medium",
      "zkMemory": "16",
      "kafkaMemory": "8"
    },
    {
      "InstanceType": "t2.small",
      "zkMemory": "8",
      "kafkaMemory": "4"
    }
  ],
  "es_hdfs": [
    {
      "InstanceType": "t2.medium",
      "esMemory": "16",
      "hdfsMemory": "8"
    },
    {
      "InstanceType": "t2.small",
      "esMemory": "8",
      "hdfsMemory": "4"
    }
  ]
}

Je veux d'abord sélectionner un tableau par un nom de propriété. Et puis je veux sélectionner un objet du tableau par la valeur de la propriété InstanceType.

Exemple pour la propriété zk_kafka et la valeur t2.medium:

{
  "InstanceType": "t2.medium",
  "zkMemory": "16",
  "kafkaMemory": "8"
}

Je sais comment sélectionner le tableau:

jq .zk_kafka

Mais je ne sais pas comment filtrer le tableau d'objets par une valeur de propriété.

12
Rehan Ch

Utilisez le filtre select de jq:

jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")'

Utilisez le --arg option pour passer un argument à la requête.

jq --arg instance "t2.medium" '.zk_kafka | .[] | select(.InstanceType == $instance)'

jq a un manuel , un tutoriel et un livre de cuisine .

21
ceving