11 mars 2016
JSON (JavaScript Object Notation) est un format structuré équivalent à XML
Pourquoi JSON ?
Ce sont des clés auxquelles on associe une valeur par ":"
Les couples clé/valeur sont séparés par une virgule :
Possibilités de valeurs :
Exemple
- imbrication
- tableaux
{
"doc": {
"title": "Exemple",
"ul": [
"imbrication",
"tableaux"
]
}
}
XSLT: XML -> transformé
JBJ: JSON -> transformé
Point commun : castor-core (fin janvier 2015)
$ echo '{ "resolveDOI": true }' > ./resolveDOI.jbj
$ echo '"10.1134/S1607672911010121"' > DOI.json
$ jbj -u ist ./resolveDOI.jbj DOI.json
{ 'doi-publication-title':
[ 'Dokl Biochem Biophys',
'Doklady Biochemistry and Biophysics' ],
'doi-publication-date-year': 2011,
'doi-publisher': 'Pleiades Publishing Ltd',
'doi-type': 'journal-article',
'doi-ISSN': [ '1607-6729', '1608-3091' ],
'doi-subject': [ 'Biophysics', 'Biochemistry', 'Chemistry(all)' ],
'doi-DOI': '10.1134/s1607672911010121' }
Le pilote a fui, vous êtes tous passagers
... l'avion s'écrase
Il nous faut :
Votre but : Redresser l'avion
Comment ?
En réalisant une série d'exercices avant le crash...
10 minutes par équipage
Découvrons le tableau de bord
Avec l'input numéro 1, récupérer l'age
.
Astuce :
get
Pour voir la solution, flèche vers le bas
{
"get": "age"
}
Avec l'input, récupérer à la fois l'age
et le name
.
Astuce :
avec get
aussi,
mais avec un tableau en paramètres
Pour voir la solution, flèche vers le bas
{
"get": ["age", "name"]
}
Avec l'input, concaténer les deux champs name
et age
, dans cet ordre.
Notez que l'ordre des champs est modifié par rapport à l'input.
Astuce :
join
Pour voir la solution, flèche vers le bas
{
"get": ["name", "age"],
"join": ", "
}
Avec l'input,faire une phrase qui dit que la personne name
a age
années.
template
template
en cliquant sur le bouton
Pour voir la solution, flèche vers le bas
{
"template": "{{name}} est un {{job}} de {{age}} ans."
}
Récupérer le name
du premier projet.
Astuce :
select
Pour voir la solution, flèche vers le bas
{
"select": ".projects :first-child .name"
}
Récupérer le name
du dernier projet.
Astuce :
select
,
sélecteur CSS3
Pour voir la solution, flèche vers le bas
{
"select": ".projects :last-child .name"
}
Récupérer le name
des projets qui ont un label
.
Pour voir la solution, flèche vers le bas
{
"select": ".projects .label ~ .name"
}
Récupérer les name
des projets dans un tableau.
Astuce :
select
plus simplement qu'avant
Pour voir la solution, flèche vers le bas
{
"select": ".projects .name"
}
Puis, trier le tableau obtenu.
sort
sort
) ne prend pas de paramètre, on lui donne par
convention true
, mais toute autre valeur fonctionnerait aussi
Pour voir la solution, flèche vers le bas
{
"select": ".projects .name",
"sort": true
}
Récupérer la liste des projets dans un tableau d'objets.
select
très simple
select
renvoie systématiquement un tableau, et
comme projects
est un tableau, on a un tableau de tableaux. Pour supprimer un niveau, récupérer le premier (et seul) élément de ce tableau, en utilisant "get": 0
Pour voir la solution, flèche vers le bas
{
"select": ".projects",
"get": 0
}
Puis, trier les projets selon leur name
.
Astuce :
sortBy
Pour voir la solution, flèche vers le bas
{
"select": ".projects",
"get": 0,
"sortBy": "name"
}
Récupérer le tableau des name
de chaque projet, et
capitaliser
chacun d'entre eux.
capitalize
foreach
foreach
travaille avec un élément du tableau d'origine comme input
Pour voir la solution, flèche vers le bas
{
"select": ".projects .name",
"foreach": {
"capitalize": true
}
}
Remplacer tout l'input par la chaîne de caractères nouveau
.
Astuce :
set
Pour voir la solution, flèche vers le bas
{
"set": "nouveau"
}
Ajouter un champ à input, dont le nom est
dirty
, et le contenu Rrogntudjû
(avec les espaces en début et fin)
Pour voir la solution, flèche vers le bas
{
"$dirty": { "set" : " Rrogntudjû " }
}
Ajouter un champ à input, dont le nom est
clean
, et qui prend la valeur du champ
dirty
auquel on enlève les espaces au début et à la
fin.
get
(et dirty
non plus)
trim
Pour voir la solution, flèche vers le bas
{
"$dirty": { "set": " Rrogntudjû " },
"get": "dirty",
"trim": true
}
À la suite de la solution de l'exercice précédent, remplacer Rrogn
par Nom
.
Astuce :
replace
avec deux paramètres
Pour voir la solution, flèche vers le bas
{
"$dirty": { "set": " Rrogntudjû " },
"get": "dirty",
"trim": true,
"replace": ["Rrogn","Nom "]
}
À la suite encore, remplacer tudjû
par de Dieu
(si si!).
replace
,
évidemment!
#2
Pour voir la solution, flèche vers le bas
{
"$dirty": { "set": " Rrogntudjû " },
"get": "dirty",
"trim": true,
"replace": ["Rrogn","Nom "],
"replace#2": ["tudjû","de Dieu"]
}
Récupérer la liste des name
des
projects
(voir un des exercices précédents), puis
remplacer ezpaarse
par ezPAARSE
, castor-load
par Castor-LOAD
,
termith
par Termith
, et
ezmesure
par ezMESURE
.
mapping
array
dans lequel se trouve
mapping
, en cliquant sur le bouton
Pour voir la solution, flèche vers le bas
{
"select": ".projects .name",
"mapping": {
"ezpaarse": "ezPAARSE",
"castor-load": "Castor-LOAD",
"termith": "Termith",
"ezmesure": "ezMESURE"
}
}
Calculer l'âge du collègue abder
.
compute
get
accepte les notations pointées: colleagues.abder.birth
this
contient l'input (dans compute
)
compute
fait partie du module template
Pour voir la solution, flèche vers le bas
{
"get": "colleagues.abder.birth",
"compute": "2016 - this"
}
{
"get": "colleagues.abder",
"compute": "2016 - birth"
}
Calculer l'âge des collègues de Yannick.
Pour voir la solution, flèche vers le bas
{
"select": ".birth",
"foreach": {
"compute": "2016 - this"
}
}
{
"select": ".colleagues",
"get": 0,
"foreach": {
"compute": "2016 - birth"
}
}