Mise en page d'un fichier json avec php

alex012 Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 87 Date d'inscription   Statut Membre Dernière intervention  
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > alex012 Messages postés 87 Date d'inscription   Statut Membre Dernière intervention  
 
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