2023-03-15 23:48:10 +00:00
# Notes
Pour transformer le json d'origine, on itérera sur le fichier pour le scinder en deux
on utilise le tools ici : https://jsoneditoronline.org/#right=cloud.f0a19b92543d4c7fa1bdb58a913707e8& left=local.xoliwi
##### Pour avoir le json en francais:
2023-03-17 00:45:20 +00:00
*Cette version de la fonction query utilise une récursion pour explorer les sous-objets de chaque objet dans la liste data. La fonction checkKey transforme les clés se terminant par "_fr" en supprimant cette terminaison, et elle vérifie si la clé contient un nombre avant de traiter ses sous-objets. Si la clé ne contient pas de nombre, la fonction ne traite pas les sous-objets de cette clé.*
2023-03-15 23:48:10 +00:00
```js
function query(data) {
2023-03-17 00:45:20 +00:00
function checkKey(obj) {
obj = _.mapKeys(obj, (value, key) => {
if (_.endsWith(key, "_fr") ) {
return key.slice(0, -3);
}
return key;
});
for (const [key, value] of Object.entries(obj)) {
if (_.isObject(value) & & isNaN(value) ) {
obj[key] = checkKey(value);
}
}
return _.pickBy(obj, (value, key) => !_ .endsWith(key, "_en"));
}
2023-03-15 23:48:10 +00:00
return _.chain(data)
2023-03-17 00:45:20 +00:00
.map(obj => checkKey(obj))
.value();
2023-03-15 23:48:10 +00:00
}
2023-03-17 00:45:20 +00:00
2023-03-15 23:48:10 +00:00
```
##### Pour deplacer les classes dans un objet "classes"
```js
function query(data) {
return _.chain(data)
.map(item => {
const {
bard = "",
cleric = "",
druid = "",
paladin = "",
ranger = "",
scholar = "",
sorcerer = "",
warlock = "",
wizard = "",
...rest
} = item;
return {
...rest,
classes: {
bard,
cleric,
druid,
paladin,
ranger,
scholar,
sorcerer,
warlock,
wizard
}
};
})
.value();
}
```
2023-03-17 00:45:20 +00:00
##### pour renommer les components :
```js
function query(data) {
return _.chain(data)
.map(obj => {
// Renommer les clés spécifiées
obj = _.mapKeys(obj, (value, key) => {
switch(key) {
case "composite_oral":
return "v";
case "composite_moves":
return "s";
case "composite_material":
return "m";
case "material_components_fr":
return "m_fr";
case "material_components_en":
return "m_en";
case "composite_material_destroyed":
return "m_destroyed"
default:
return key;
}
});
return obj;
})
.value();
}
```
##### Pour deplacer les components dans un objet "components"
```js
function query(data) {
return _.chain(data)
.map(item => {
const {
m_destroyed = "",
v = "",
s= "",
m= "",
m_fr= "",
m_en= "",
...rest
} = item;
return {
...rest,
components: {
m_destroyed,
v,
s,
m,
m_fr,
m_en,
}
};
})
.value();
}
```
2023-03-15 23:48:10 +00:00
##### Pour ajouter recid et source
```js
function query(data) {
return _.chain(data)
.map((item, index) => _.merge({ recid: index }, item))
.map((item, index) => _.merge({ source: "GRI01" }, item))
.value();
}
```
##### Pour transformer les clé 0/1 en true/false
```js
function query(data) {
return _.chain(data)
.map((item) => ({
...item,
composite_material_destroyed: item.composite_material_destroyed = "x"? true : false,
composite_oral: item.composite_oral == 1? true : false,
has_higher_level_details: item.has_higher_level_details == 1? true : false,
ritual: item.ritual == 1? true : false,
dragons_exclusive: item.dragons_exclusive == 1? true : false,
composite_moves: item.composite_moves == 1? true : false,
composite_material: item.composite_material == 1? true : false,
corrupted: item.corrupted == 1? true : false,
concentration: item.concentration == 1? true : false,
}))
.value();
}
```