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"
}
}