Mise en page d'un fichier json avec php

Fermé
alex012 Messages postés 87 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 28 août 2021 - 24 oct. 2019 à 15:22
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 26 oct. 2019 à 16:04
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"}]}
A voir également:

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
25 oct. 2019 à 10:09
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 mardi 12 février 2013 Statut Membre Dernière intervention 28 août 2021
26 oct. 2019 à 15:57
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > alex012 Messages postés 87 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 28 août 2021
26 oct. 2019 à 16:04
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