Outils pour utilisateurs

Outils du site


web:javascript:json:jq

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
web:javascript:json:jq [2018/12/17 17:12] sgariepyweb:javascript:json:jq [2023/06/12 15:05] (Version actuelle) – [Utilisation] sgariepy
Ligne 1: Ligne 1:
 ====== jq ====== ====== jq ======
  
-jq est un programme en ligne de commande pour traiter du JSON.  Le [[https://stedolan.github.io/jq/|site officiel]].+jq est un programme en ligne de commande pour traiter du JSON.  Le [[https://stedolan.github.io/jq/|site officiel]].  [[https://earthly.dev/blog/jq-select/|An Introduction to JQ]] 
 + 
 + 
 +====== Installation ====== 
 + 
 + 
 +Ubuntu: 
 + 
 +  $ sudo apt-get install jq 
 + 
 +macOS: 
 + 
 +  $ brew install jq 
 + 
 +====== Utilisation ====== 
  
  
Ligne 12: Ligne 27:
   {   {
     "id": 1,     "id": 1,
-    "name": "Google"+    "name": "Google",
     "country": "USA",     "country": "USA",
-    "employees: 100000+    "employees": 100000
   },   },
   {   {
     "id": 2,     "id": 2,
-    "name": "Samsung" +    "name": "Samsung", 
-    "country": "South Korea" +    "country": "South Korea", 
-    "employees: 500000+    "employees": 500000
   },   },
   {   {
     "id": 3,     "id": 3,
-    "name": "Sony" +    "name": "Sony", 
-    "country": "Japan" +    "country": "Japan", 
-    "employees: 750000+    "employees": 750000
   },   },
   {   {
     "id": 3,     "id": 3,
-    "name": "IBM" +    "name": "IBM", 
-    "country": "USA" +    "country": "USA", 
-    "employees: 250000+    "employees": 250000 
 +  } 
 +
 +</code> 
 + 
 +  $ cat companies.json | jq 'map(select(.country == "USA" and .employees >= 200000))' 
 +   
 + 
 +En sortie nous aurons donc: 
 + 
 +<code jsvaacript> 
 +
 +  { 
 +    "id": 3, 
 +    "name": "IBM", 
 +    "country": "USA", 
 +    "employees": 250000 
 +  } 
 +
 +</code> 
 + 
 +Un autre exemple, pris d'une [[https://stackoverflow.com/questions/36571556/how-to-query-a-json-file|question sur SO]], si on a : 
 + 
 +<code javascript> 
 +
 +    "response":
 +        "result":
 +            "Countries":
 +                "row":
 +                    { 
 +                        "no": "1", 
 +                        "FL":
 +                            { 
 +                                "content": "USA", 
 +                                "val": "Country" 
 +                            }, 
 +                            { 
 +                                "content": "Barack Obama", 
 +                                "val": "President" 
 +                            } 
 +                        ] 
 +                    }, 
 +                    { 
 +                        "no": "2", 
 +                        "FL":
 +                            { 
 +                                "content": "Cuba", 
 +                                "val": "Country" 
 +                            }, 
 +                            { 
 +                                "content": "Raul Castro", 
 +                                "val": "President" 
 +                            } 
 +                        ] 
 +                    } 
 +                ] 
 +            } 
 +        } 
 +    } 
 +
 +</code> 
 + 
 +On peut faire: 
 + 
 +  $ cat data.json | jq '.response.result.Countries.row[].FL | {country: .[0].content, president: .[1].content, val: .[1].val} | select(.country == "USA") | {president, val}' 
 + 
 + 
 + 
 +===== To Entries avec Map ===== 
 + 
 +Pour //pivoter// les clés d'objets en valeurs, par exemple dans ce cas-ci: 
 + 
 +<code json> 
 +
 +    "items":
 +        "01":
 +            "name": "Name of 01", 
 +            "spec":
 +                "name": "Specific name 01" 
 +            } 
 +        }, 
 +        "02":
 +            "name": "Name of 02", 
 +            "spec":
 +                "name": "Specific name 02" 
 +            } 
 +        } 
 +    } 
 +
 +</code> 
 + 
 +On peut utiliser ''to_entries'' pour que les items 01 et 02 soient des valeurs de ''key'' et l'objet lui-même soit une valeur: 
 + 
 +<code> 
 +$ cat ./test.json | jq '.items | to_entries' 
 +
 +  { 
 +    "key": "01", 
 +    "value":
 +      "name": "Name of 01", 
 +      "spec":
 +        "name": "Specific name 01" 
 +      } 
 +    }
   },   },
 +  {
 +    "key": "02",
 +    "value": {
 +      "name": "Name of 02",
 +      "spec": {
 +        "name": "Specific name 02"
 +      }
 +    }
 +  }
 ] ]
 </code> </code>
 +
 +Avec ''map'', on peut alors façonner un objet comme on le veut:
 +
 +<code>
 +$ cat ./test.json | jq '.items | to_entries | map({ itemCode: .key, name: .value.name, specName: .value.spec.name })'
 +[
 +  {
 +    "itemCode": "01",
 +    "name": "Name of 01",
 +    "specName": "Specific name 01"
 +  },
 +  {
 +    "itemCode": "02",
 +    "name": "Name of 02",
 +    "specName": "Specific name 02"
 +  }
 +]
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +====== Clés d'un fichier de traductions ======
 +
 +On peut obtenir les clés de fichiers de traductions (qui sont utilisés pour référencer une chaine à traduire) avec ce jq:
 +
 +  $ cat src/assets/i18n/fr.json | jq -c 'path(..)|[.[]|tostring]|join(".")|select(. != "")|select(index("."))'
 +
 +Le premier ''select()'' permet d'enlever la première clé vide, et l'autre permet d'enlever les clés parents ou racines (ne sont pas nécessairement associé à quelconque texte).
 +
 +
 +
 +
 +====== Ressources ======
 +
 +  * [[https://programminghistorian.org/en/lessons/json-and-jq|Reshaping JSON with jq]]
 +  * [[https://gist.github.com/olih/f7437fb6962fb3ee9fe95bda8d2c8fa4|Cheat Sheet]]
 +
 +
web/javascript/json/jq.1545063164.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)