tech:notes_json
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| tech:notes_json [2026/05/05 20:33] – Jean-Baptiste | tech:notes_json [2026/05/29 16:11] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes JSON et YAML | ||
| + | |||
| + | | | ||
| + | | ------------- | ------------------------------------------------------------------------------ | | ||
| + | | **jc** | ||
| + | | **jq** | ||
| + | | **json_pp** | ||
| + | | **JMESPath** | ||
| + | | **jp** | ||
| + | |||
| + | |||
| + | Voir : | ||
| + | * JSONPath et go_template | ||
| + | * JSON RFC 6902 patch | ||
| + | |||
| + | |||
| + | Voir Ansible : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | Voir aussi : | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ~~~bash | ||
| + | sudo apt-get install jc | ||
| + | dig www.google.com | jc --dig -p | ||
| + | ~~~ | ||
| + | |||
| + | ~~~javascript | ||
| + | [ | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ] | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ~~~bash | ||
| + | cat fic.json |python3 -m json.tool |native2ascii -encoding UTF-8 -reverse | ||
| + | ~~~ | ||
| + | |||
| + | Extension Firefox http:// | ||
| + | |||
| + | ~~~bash | ||
| + | sudo apt-get install yajl-tools | ||
| + | ~~~ | ||
| + | |||
| + | yajl-tools | ||
| + | * json_reformat | ||
| + | * json_verify | ||
| + | |||
| + | ~~~bash | ||
| + | mongoimport --host localhost --db database --collection collection < | ||
| + | ~~~ | ||
| + | |||
| + | Convert JSON to YAML | ||
| + | ~~~bash | ||
| + | yq -P sample.json | ||
| + | ~~~ | ||
| + | |||
| + | Ou encore | ||
| + | ~~~bash | ||
| + | python -c ' | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | pip install jsbeautifier | ||
| + | js-beautify file.js | ||
| + | ~~~ | ||
| + | |||
| + | Dico vers JSON ? | ||
| + | ~~~bash | ||
| + | cat plop.t |tr \' \" |sed -e ' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | VIM - Formater le JSON | ||
| + | ~~~ | ||
| + | :%!python -m json.tool | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Requête (Query) | ||
| + | |||
| + | Avec curl | ||
| + | ~~~bash | ||
| + | curl -k https:// | ||
| + | ~~~ | ||
| + | |||
| + | Avec **jq** | ||
| + | voir : https:// | ||
| + | |||
| + | Top level sections | ||
| + | ~~~bash | ||
| + | cat single-instance.json |jq ' | ||
| + | ~~~ | ||
| + | |||
| + | Exemple wildcard | ||
| + | ~~~ | ||
| + | $ curl -s -u " | ||
| + | 1680 | ||
| + | |||
| + | $ curl -s -u " | ||
| + | 1572 | ||
| + | 1569 | ||
| + | 2343 | ||
| + | ~~~ | ||
| + | |||
| + | jq retours sans guillemet (quote) : | ||
| + | ~~~bash | ||
| + | jq -r | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | docker inspect portainer/ | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | ansible -i testsrv, -m setup all |sed -e ' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Filtres | ||
| + | |||
| + | Conversion string integer avec `tonumber` | ||
| + | |||
| + | Exemple | ||
| + | ~~~bash | ||
| + | jq ' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | ## Autres | ||
| + | |||
| + | ### Ansible - Utilisation de boolean en extra vars via JSON | ||
| + | |||
| + | ~~~bash | ||
| + | ansible-playbook playbook.yml -i inventory.ini -e '{ " | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## YAML | ||
| + | |||
| + | | | ||
| + | | ----------------------------------------- | ------------------------------------ | | ||
| + | | **yq** | ||
| + | | **[[https:// | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | Contrôle syntaxe : | ||
| + | * [[https:// | ||
| + | |||
| + | Ce que **jq** est à json, **yq** l'est pour le yaml. | ||
| + | |||
| + | **yq** permet également de convertir des fichiers JSON en YAML | ||
| + | ~~~bash | ||
| + | cat .kube/ | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | # pip install --user yq | ||
| + | sudo apt-get install yq | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | openstack image show IMAGE1 -c properties -f yaml |yq ' | ||
| + | ~~~ | ||
| + | |||
| + | Filtrer sur les clefs (keys) | ||
| + | ~~~bash | ||
| + | cat meta/ | ||
| + | # Ou | ||
| + | cat meta/ | ||
| + | ~~~ | ||
| + | |||
| + | Mofifier un fichier YAML | ||
| + | |||
| + | avec yq : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | En Python et autres : | ||
| + | * https:// | ||
| + | |||
| + | Avec Ansible : | ||
| + | https:// | ||
| + | |||
| + | Exemple non-specific tag | ||
| + | ~~~yaml | ||
| + | configuration: | ||
| + | ~~~ | ||
| + | |||
| + | Reférences | ||
| + | ~~~yaml | ||
| + | vars: | ||
| + | webapp: | ||
| + | version: & | ||
| + | custom_name: | ||
| + | - " | ||
| + | - *my_version | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Exemple Python | ||
| + | |||
| + | ~~~python | ||
| + | import yaml | ||
| + | |||
| + | with open(" | ||
| + | #filters = yaml.load(yamlfile, | ||
| + | | ||
| + | filters = yaml.safe_load(yamlfile) | ||
| + | ~~~ | ||
| + | | ||
| + | |||
| + | ## Échapper certains caractères | ||
| + | |||
| + | ### Passer un fichier YAML à une API REST qui fonctionne en JSON | ||
| + | |||
| + | ~~~bash | ||
| + | cat inv.yaml |sed -e ' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Exemple YAML vers JSON | ||
| + | |||
| + | `inv.yaml` | ||
| + | ~~~yaml | ||
| + | --- | ||
| + | server1: | ||
| + | hosts: | ||
| + | server1.inf.acme.lan: | ||
| + | vars: | ||
| + | SET_LINGERING_LIST: | ||
| + | - SET_LINGERING_USER: | ||
| + | SET_LINGERING_ENABLED: | ||
| + | - SET_LINGERING_USER: | ||
| + | SET_LINGERING_ENABLED: | ||
| + | |||
| + | type_host: | ||
| + | hosts: | ||
| + | server1.inf.acme.lan: | ||
| + | vars: | ||
| + | type: host | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | #! /bin/bash | ||
| + | set -euo pipefail | ||
| + | |||
| + | YAML=" | ||
| + | |||
| + | curl -v -k -u user1:' | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | |||
| + | } | ||
| + | }' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | Ou avec un heredoc | ||
| + | |||
| + | ~~~bash | ||
| + | YAML=" | ||
| + | --- | ||
| + | server1: | ||
| + | hosts: | ||
| + | server1.inf.acme.lan: | ||
| + | vars: | ||
| + | SET_LINGERING_LIST: | ||
| + | - SET_LINGERING_USER: | ||
| + | SET_LINGERING_ENABLED: | ||
| + | - SET_LINGERING_USER: | ||
| + | SET_LINGERING_ENABLED: | ||
| + | |||
| + | type_host: | ||
| + | hosts: | ||
| + | server1.inf.acme.lan: | ||
| + | vars: | ||
| + | type: host | ||
| + | EOF | ||
| + | )" | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### En convertissant le YAML en JSON | ||
| + | |||
| + | En passant un JSON dans un JSON en string | ||
| + | |||
| + | ~~~bash | ||
| + | # | ||
| + | JS=" | ||
| + | |||
| + | JS=" | ||
| + | URL='' | ||
| + | |||
| + | curl -v -k -u user1:' | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | |||
| + | } | ||
| + | }' | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Exemple de yaml | ||
| + | |||
| + | ~~~yaml | ||
| + | CRON_HOST_TARGETS: | ||
| + | all: | ||
| + | - CRON_FILENAME: | ||
| + | CRON_USER: app1 | ||
| + | CRONS: | ||
| + | - DESCRIPTION: | ||
| + | SCHED: "0 * * * *" | ||
| + | CMDLINE: " | ||
| + | |||
| + | sc01: | ||
| + | - CRON_FILENAME: | ||
| + | CRON_USER: app1 | ||
| + | CRONS: | ||
| + | - DESCRIPTION: | ||
| + | SCHED: "06 03 * * *" | ||
| + | CMDLINE: ". ~/ | ||
| + | |||
| + | - DESCRIPTION: | ||
| + | SCHED: "05 03 * * *" | ||
| + | CMDLINE: ". ~/ | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | ### Validation | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ## Pb | ||
| + | |||
| + | ### Compile Error - Échapper certains caractères | ||
| + | |||
| + | `plop.yml` | ||
| + | ~~~yaml | ||
| + | rec:plop: | ||
| + | stage: plop | ||
| + | variables: | ||
| + | ENV: " | ||
| + | |||
| + | prd:plop: | ||
| + | stage: plop | ||
| + | variables: | ||
| + | ENV: " | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | $ cat plop.yml |yq ' | ||
| + | jq: error: syntax error, unexpected ':', | ||
| + | .rec: | ||
| + | jq: 1 compile error | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Solution | ||
| + | |||
| + | ~~~bash | ||
| + | cat plop.yml |yq ' | ||
| + | ~~~ | ||
| + | |||
| + | |||
