Mise en page d'un fichier json avec php

alex012 Messages postés 103 Statut Membre -  
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
{"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

jordane45 Messages postés 40050 Statut Modérateur 4 757
 
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

0
alex012 Messages postés 103 Statut Membre
 
ok, merci, jd vais donc laisser cette mise en page, par contre j'ai un problème avec la fonction sort(), elle trie dans l'ordre alphabétique, mais d'abord les majuscules puis les minuscules, j'avais compris que SORT_FLAG_CASE permettait de trier sans respecter la casse mais ça ne fonctionne pas

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
0
jordane45 Messages postés 40050 Statut Modérateur 4 757 > alex012 Messages postés 103 Statut Membre
 
Ceci est une nouvelle question. il serait donc souhaitable d'ouvrir une nouvelle discussion propre à cette problématique.
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 )
0