Mise en page d'un fichier json avec php
alex012
Messages postés
103
Statut
Membre
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,
j'ai un petit problème, j'ai un fichier json que je veux modifier en php mais une fois modifié, il perd sa mise en page, tout est sur une ligne au lieu d'etre sur plusieurs lignes avec des tabulations.
c'est json_decode() et json_encode() qui posent problème mais je suis obligé de les utiliser, donc comment restructurer un fichier après avoir utilisé ces fonctions?
mon json en entrée
mon php
et mon json en sortie
j'ai un petit problème, j'ai un fichier json que je veux modifier en php mais une fois modifié, il perd sa mise en page, tout est sur une ligne au lieu d'etre sur plusieurs lignes avec des tabulations.
c'est json_decode() et json_encode() qui posent problème mais je suis obligé de les utiliser, donc comment restructurer un fichier après avoir utilisé ces fonctions?
mon json en entrée
{"Definitions" : [
{
"Mot" : "ra",
"Definition" : "ar"
},
{
"Mot" : "ab",
"Definition" : "ba"
},
{
"Mot" : "zf",
"Definition" : "fz"
},
{
"Mot" : "cx",
"Definition" : "xc"
}
]
}
mon php
$json_file = "JS/bla.json";
$lexique = file_get_contents($json_file);
$save_name = "JS/lexiqueSave/lexique-";
$save_name .= date('d-m-Y');
$save_name .= ".json";
file_put_contents($save_name, $lexique);
$lexique = json_decode($lexique);
$définition = $lexique->{'Definitions'};
array_push( $définition, array('Mot' => 'ale', 'Definition' => 'ela'));
sort($définition, SORT_FLAG_CASE);
$définition = array('Definitions' => $définition);
$définition = json_encode($définition);
file_put_contents("JS/bla1.json", $définition);
et mon json en sortie
{"Definitions":[{"Mot":"ab","Definition":"ba"},{"Mot":"ale","Definition":"ela"},{"Mot":"cx","Definition":"xc"},{"Mot":"ra","Definition":"ar"},{"Mot":"zf","Definition":"fz"}]}
1 réponse
Bonjour,
Le "vrai" format du Json.. c'est celui retourné par ton code PHP.
Les retours à la ligne ne servent à rien (et certains éditeurs permettent de le visualiser automatiquement avec les indentations et le retour à la ligne sans avoir à faire ce "travail" manuellement )
Après... le json.. ça reste du texte ...
Rien ne t’empêche d'utiliser du "replace" pour insérer, devant chaque virgule, crochet... des retours à la ligne, des espaces ou des tabulations avant de réécrire le fichier.
NB: A l'avenir, merci de poster ton code en utilisant correctement les balises de code ( en y précisant le langage)
Explications à lire ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Le "vrai" format du Json.. c'est celui retourné par ton code PHP.
Les retours à la ligne ne servent à rien (et certains éditeurs permettent de le visualiser automatiquement avec les indentations et le retour à la ligne sans avoir à faire ce "travail" manuellement )
Après... le json.. ça reste du texte ...
Rien ne t’empêche d'utiliser du "replace" pour insérer, devant chaque virgule, crochet... des retours à la ligne, des espaces ou des tabulations avant de réécrire le fichier.
NB: A l'avenir, merci de poster ton code en utilisant correctement les balises de code ( en y précisant le langage)
Explications à lire ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
NB: excusez moi pour les balises code, mais elles ne fonctionnent pas quand je clique sur le language voulu, je vais donc faire à la main.
Merci
Quoi qu'il en soit.. sur quoi veux tu trier ? car bon... Tu as un array 2D ... et donc la fonction "sort" de base ne fonctionnera pas....
Il faut donc utiliser
https://www.php.net/manual/fr/function.array-multisort.php
Ou sinon un code à base de usort
https://www.php.net/manual/fr/function.usort.php
du genre :
function cmp($a, $b) { if ($a["Mot"] == $b["Mot"] { return 0; } return ($a["Mot"] < $b["Mot"]) ? -1 : 1; } usort($yourArray,"cmp")Que tu peux étoffer en gérant les caractères accentués et les majuscules éventuellement. ( je te laisse le modifier à ta guise selon tes besoins )