[RESOLU] Renomer un résutlat d'un json en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Renomer un résutlat d'un json en php

Re: Renomer un résutlat d'un json en php

par harmony » 04 déc. 2018, 01:17

top mega cool je suis arriver merci a tous les 2 Saian & or 1
<?php

///récup nom
$json = file_get_contents("ok.json");
$parsed_json = json_decode($json, true);
echo array_keys($parsed_json['menu1'])[0];

///renommage nom 
$oldMessage1 = array_keys($parsed_json['menu1'])[0]; 
$deletedFormat1 = "supermenu"; /// renommer le résultat 

$str = implode("\n", file('ok.json'));
$fp = fopen('ok.json', 'w');
$str = str_replace("$oldMessage1", "$deletedFormat1", $str);
fwrite($fp, $str, strlen($str));
fclose($fp);

?>

Re: Renomer un résutlat d'un json en php

par harmony » 03 déc. 2018, 18:13

Explication delux grand merci Saian ,
<?php

// ici $data est un objet php
$data = json_decode(file_get_contents('ok.json'));

// copie menu2 dans supermenu
$data->menu1->supermenu = $data->menu1->menu2;
// supprime menu2
unset($data->menu1->menu2);
file_put_contents('ok.json', json_encode($data));
?>
mais la
$data->menu1->supermenu = $data->menu1->menu2;
->menu2 il faudrait allez rechercher comment s appelle le futur menu2 dans le json car ça peut s'appeler autrement..que faire?

Re: Renomer un résutlat d'un json en php

par Saian » 03 déc. 2018, 17:34

Si tu as besoin de remplacer menu2 par une autre chaîne tu dois te tourner vers le 2ème exemple de code.

Le code que tu as écris n'est pas très cohérent et contient des erreurs. Le str_replace entre autre sert à modifier une chaine de caractère, or dans ce cas (avec le json_decode), menu2 est une propriété d'objet et non une chaine de caractères et on ne peut pas modifier le nom d'une propriété d'objet. On peut la copier dans une autre et la supprimer.

Tu peux donc faire comme ceci (pas la peine de mémoriser la propriété dans une variable intermédiaire comme dans mon exemple précédent) :

<?php

// ici $data est un objet php
$data = json_decode(file_get_contents('ok.json'));

// copie menu2 dans supermenu
$data->menu1->supermenu = $data->menu1->menu2;
// supprime menu2
unset($data->menu1->menu2);

file_put_contents('ok.json', json_encode($data));

Tu pourrais éventuellement utiliser le str_replace mais dans ce cas en traitant directement le contenu du fichier json sans faire un json_decode :

<?php

// ici $data est une chaine de caractère contenant l'ensemble du fichier
$data = file_get_contents('ok.json');

// remplacement la chaine menu2 par la chaine supermenu
$data = str_replace('menu2', 'supermenu', $data);

file_put_contents('ok.json', $data);

Mais si tu as plusieurs fois menu2 dans le fichier json, ça va tous les remplacer.

Re: Renomer un résutlat d'un json en php

par harmony » 03 déc. 2018, 17:19

coucou Saian bon je suis de niveau -1000 ,donc comprends po grand choses , le nom menu2 peut changer a tout moment ex maison , pomme,fraise..
donc je sais pas si je doit continuer dans ta direction tu peux me confirmer??? ou continuer dans la direction de l'ancien code.
désoler pour mon incompréhension...

Re: Renomer un résutlat d'un json en php

par Saian » 03 déc. 2018, 15:59

<?php

// charger le json sous forme d'objet php
$data = json_decode(file_get_contents('ok.json'));

// modifier le contenu de menu2
$data->menu1->menu2 = 'nouvelle valeur';

// enregistrer le json modifié
file_put_contents('ok.json', json_encode($data));

Si tu veux modifier la chaine menu2 par supermenu, il faut que tu mettes de côté le contenu de menu2 dans une variable, que tu supprimes menu2 de $data, puis que tu réinjectes le contenu de menu2 dans $data en créant la propriété supermenu :

<?php

// charger le json sous forme d'objet php
$data = json_decode(file_get_contents('ok.json'));

// mémoriser le contenu de menu2 dans une variable
$menu2 = $data->menu1->menu2;
// supprimer menu2
unset($data->menu1->menu2);
// réinjecter le contenu menu2 dans une propriété supermenu
$data->menu1->supermenu = $menu2;

// enregistrer le json modifié
file_put_contents('ok.json', json_encode($data));

Renomer un résutlat d'un json en php

par harmony » 03 déc. 2018, 15:48

Bonjour a tous,
grâce a or 1 j ai fait de l'avance..
j'ai un code json
ex crée fichier : ok.json

Code : Tout sélectionner

{ "menu1":{ "menu2": { "ok2":"blabla" }, "menu3": { "ok3":"blabla3" } } }
je voudrais récupérer menu2 chose faite grâce a (or 1)
<?php
$json = file_get_contents("ok.json");
$parsed_json = json_decode($json, true);
echo array_keys($parsed_json['menu1'])[0];
?>
maintenant voudrait renommer le résultat (dans ex c'est menu2)
j'ai déjà fait un tit bout mais a ( $oldMessage1 = ) je sais pas quoi faire...
<?php

///récup nom
$json = file_get_contents("ok.json");
$parsed_json = json_decode($json, true);
echo array_keys($parsed_json['menu1'])[0];

///renommage nom 
$oldMessage1 = "echo array_keys($parsed_json['menu1'])[0]";  ///  ici je sais pas
$deletedFormat1 = "supermenu"; /// renommer le résultat en supermenu

$str = implode("\n", file('ok.json'));
$fp = fopen('ok.json', 'w');
$str = str_replace("$oldMessage1", "$deletedFormat1", $str);
fwrite($fp, $str, strlen($str));
fclose($fp);

?>
Si quelque un a une idée?
merci d'avance