Récupération variable Object par JSON

Fermé
JFLeroi - Modifié le 3 juin 2019 à 17:02
 JFLeroi - 4 juin 2019 à 16:18
Je suis autodidacte et n'arrive pas à lire une variable transmise par JSON comme un objet {}.
Mon script fonctionne lorsque je mets le contenu de la variable en "dur" :
1- TEST du script (variable objet en dur) :
http://www.planeteprovence.com/tests/variables_en_dur.php (ligne 66)
On peut vérifier que la variable objet distante est bien chargée et est identique (console.log ligne 58)
les autres varibles le sont aussi (village lon et lat en lignes 44, 46 et 48).
La variables "données" tranférée est identique à la viable objet {villes} en dur.


Pourtant si j'essaie de lire la variable transférée via JSON dans mons script cela ne fonctionne pas :

2 - TEST du script en utilisant la variable transmise via JSON :
http://www.planeteprovence.com/tests/variables_par_JSON.php
on peut voir que les valeurs contenues dans la variable passe (console.log(villes) ligne 66)
mais le script appelant les valeurs de l'objet (ex : [villes[ville].icon) ligne 72)
ne fonctionne pas.
La variable semble être interprétée comme du texte et non plus comme un objet.

J'ai essayé de déclarer la variable villes comme un objet mais cela dépasse mes pathétiques compétences :
TEST du script en déclarant comme objet la variable transmise via JSON :
http://www.planeteprovence.com/tests/variables_par_JSON_object_create.php (ligne 54)
Cela ne change rien
A voir également:

4 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
3 juin 2019 à 17:31
Bonjour,

Déjà.. merci de nous poster ton code DIRECTEMENT sur le forum.
(en utilisant les balises de code : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code )

Ensuite, que contient ton fichier http://www.planeteprovence.com/tests/exemple_data.php ? (son code )
car la variable "donnees" n'est pas un JSON valide semblerait-il ....
Le souci ne vient donc pas de ton JS .. mais plutôt des données retournées par ton PHP.... (à la limite tu peux essayer de faire un JSON.parse sur ta variable "donnees" ... mais je pense qu'il serait préférable de retourner un JSON propre depuis le php.

Au passage, voici une petite fonction qui permet de formater les retours d'ajax en un JSON valide
/**
* Retourne le résultat au format JSON / UTF-8
* @data ; Array contenant les données à renvoyer
* @status et @status_message .. voir les codes HTTP : 
          https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
*/
function jsonResponse($status=404, $status_message = "age non trouvée", $data = array()) {
  header('Content-Type: application/json ;charset=utf-8');
  $httpStatusCode = $status;
  $httpStatusMsg = $status_message;
  $phpSapiName = substr(php_sapi_name(), 0, 3);
  if ($phpSapiName == 'cgi' || $phpSapiName == 'fpm') {
    header('Status: ' . $httpStatusCode . ' ' . utf8_decode($httpStatusMsg));
  } else {
    $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
    header($protocol . ' ' . $httpStatusCode . ' ' . $httpStatusMsg);
  }

  $response['status'] = $status;
  $response['status_message'] = $status_message;
  $response['data'] = $data;
  $json_response = json_encode($response);
  echo $json_response;
  exit();
}




0
<?php
$myObj->longitude = 6.0077500000;
$myObj->latitude = 43.5571560000;
$myObj->varvillage = 12;
$myObj->donnees = "{\"Gîtes de la Réparade - Locations vacances\": { \"lat\":43.5066550000,\"lon\":6.0154220000,\"icon\": \"3.png\"},\"Le Vallon des Palombes - Chambres d\'hôtes\": { \"lat\":43.5865420000,\"lon\":6.1019080000,\"icon\": \"2.png\"},\"La Demeure de Fanette - Chambres et restaurant\": { \"lat\":43.5840707000,\"lon\":6.1096542000,\"icon\": \"2.png\"},\"Maison Provençale - Locations vacances\": { \"lat\":43.5336219672,\"lon\":6.1229978249,\"icon\": \"3.png\"},\"La Bastide des Templiers - Chambres d\'hôtes\": { \"lat\":43.4754924092,\"lon\":5.9604476743,\"icon\": \"2.png\"},\"Le Mas des Tours - Chambres d\'hôtes\": { \"lat\":43.5311890000,\"lon\":6.1481170000,\"icon\": \"2.png\"},\"La Maison de Marlin - Location vacances\": { \"lat\":43.5291710000,\"lon\":6.1485830000,\"icon\": \"3.png\"},\"Le Pra de Pe - Chambres d\'hôtes\": { \"lat\":43.5275700000,\"lon\":6.1481400000,\"icon\": \"2.png\"},\"Chambres Conde\": { \"lat\":43.5290670000,\"lon\":6.1487290000,\"icon\": \"2.png\"},\"La Licorne - Chambres d\'hôtes\": { \"lat\":43.5279000000,\"lon\":6.1483200000,\"icon\": \"2.png\"},\"Domaine de Cornillières - Locations vacances\": { \"lat\":43.4734290000,\"lon\":5.9169186000,\"icon\": \"3.png\"},\"Mme Maestri - Location Vacances\": { \"lat\":43.5276700000,\"lon\":6.1495700000,\"icon\": \"3.png\"},\"Domaine de Nestuby - Chambres d\'hôtes\": { \"lat\":43.5037400000,\"lon\":6.1364100000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Chambres d\'hôtes\": { \"lat\":43.4622500000,\"lon\":5.9368000000,\"icon\": \"2.png\"},\"La Basse Combe - Location Vacances\": { \"lat\":43.5294651893,\"lon\":6.1521526475,\"icon\": \"3.png\"},\"Mon Cabanon - Location Vacances\": { \"lat\":43.5121000000,\"lon\":6.1490700000,\"icon\": \"3.png\"},\"Les Oliviers - Chambres d\'hôtes\": { \"lat\":43.5205100000,\"lon\":6.1539400000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Location Vacances\": { \"lat\":43.4532300000,\"lon\":5.9391100000,\"icon\": \"3.png\"},\"Le Chat Luthier - Chambres d\'hôtes\": { \"lat\":43.4748800000,\"lon\":6.1211000000,\"icon\": \"2.png\"},\"La Radassière - Chambres d\'hôtes\": { \"lat\":43.5232200000,\"lon\":6.1625700000,\"icon\": \"2.png\"},\"silence et Grillons - Chambres d\'hotes\": { \"lat\":43.6621954945,\"lon\":6.1093344495,\"icon\": \"2.png\"},\"Mas le Chêne - Location vacances\": { \"lat\":43.4999161000,\"lon\":6.1666933000,\"icon\": \"3.png\"},\"La Bastide des Pignes - Chambres d\'hôtes\": { \"lat\":43.6644290000,\"lon\":6.1136420000,\"icon\": \"2.png\"},\"Le Mas Provencal - Chambres d\'hôtes\": { \"lat\":43.6639400000,\"lon\":6.1146900000,\"icon\": \"2.png\"},\"Mas de L\\\' Olivette - Chambres d\'hôtes\": { \"lat\":43.5250500000,\"lon\":6.1860200000,\"icon\": \"2.png\"},\"Jas de la Rimade - Location Vacances\": { \"lat\":43.4620900000,\"lon\":6.1369700000,\"icon\": \"3.png\"},\"Les Chênes d\\\'Or - Locations Vacances\": { \"lat\":43.6558973167,\"lon\":6.1441576121,\"icon\": \"3.png\"},\"la Bastide de la Messine - Chambres d\'hôtes\": { \"lat\":43.4122300000,\"lon\":6.0433600000,\"icon\": \"2.png\"},\"Hôtellerie du Couvent Royal ***\": { \"lat\":43.4532900000,\"lon\":5.8635200000,\"icon\": \"1.png\"},\"Hôtel De France ****\": { \"lat\":43.4531600000,\"lon\":5.8603100000,\"icon\": \"1.png\"}}";

$myJSON = json_encode($myObj);

echo $myJSON;
?>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
4 juin 2019 à 11:31
Dans ton $myObj->donnees ... Tu retournes une STRING.... (qui contient du json... )
Donc dans ton code JS .. faut faire un JSON PARSE
Une autre solution.. c'est de convertire ce json en Array avant de le renvoyer...
$myObj->donnees = json_decode("{\"Gîtes de la Réparade - Locations vacances\": { \"lat\":43.5066550000,\"lon\":6.0154220000,\"icon\": \"3.png\"},\"Le Vallon des Palombes - Chambres d\'hôtes\": { \"lat\":43.5865420000,\"lon\":6.1019080000,\"icon\": \"2.png\"},\"La Demeure de Fanette - Chambres et restaurant\": { \"lat\":43.5840707000,\"lon\":6.1096542000,\"icon\": \"2.png\"},\"Maison Provençale - Locations vacances\": { \"lat\":43.5336219672,\"lon\":6.1229978249,\"icon\": \"3.png\"},\"La Bastide des Templiers - Chambres d\'hôtes\": { \"lat\":43.4754924092,\"lon\":5.9604476743,\"icon\": \"2.png\"},\"Le Mas des Tours - Chambres d\'hôtes\": { \"lat\":43.5311890000,\"lon\":6.1481170000,\"icon\": \"2.png\"},\"La Maison de Marlin - Location vacances\": { \"lat\":43.5291710000,\"lon\":6.1485830000,\"icon\": \"3.png\"},\"Le Pra de Pe - Chambres d\'hôtes\": { \"lat\":43.5275700000,\"lon\":6.1481400000,\"icon\": \"2.png\"},\"Chambres Conde\": { \"lat\":43.5290670000,\"lon\":6.1487290000,\"icon\": \"2.png\"},\"La Licorne - Chambres d\'hôtes\": { \"lat\":43.5279000000,\"lon\":6.1483200000,\"icon\": \"2.png\"},\"Domaine de Cornillières - Locations vacances\": { \"lat\":43.4734290000,\"lon\":5.9169186000,\"icon\": \"3.png\"},\"Mme Maestri - Location Vacances\": { \"lat\":43.5276700000,\"lon\":6.1495700000,\"icon\": \"3.png\"},\"Domaine de Nestuby - Chambres d\'hôtes\": { \"lat\":43.5037400000,\"lon\":6.1364100000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Chambres d\'hôtes\": { \"lat\":43.4622500000,\"lon\":5.9368000000,\"icon\": \"2.png\"},\"La Basse Combe - Location Vacances\": { \"lat\":43.5294651893,\"lon\":6.1521526475,\"icon\": \"3.png\"},\"Mon Cabanon - Location Vacances\": { \"lat\":43.5121000000,\"lon\":6.1490700000,\"icon\": \"3.png\"},\"Les Oliviers - Chambres d\'hôtes\": { \"lat\":43.5205100000,\"lon\":6.1539400000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Location Vacances\": { \"lat\":43.4532300000,\"lon\":5.9391100000,\"icon\": \"3.png\"},\"Le Chat Luthier - Chambres d\'hôtes\": { \"lat\":43.4748800000,\"lon\":6.1211000000,\"icon\": \"2.png\"},\"La Radassière - Chambres d\'hôtes\": { \"lat\":43.5232200000,\"lon\":6.1625700000,\"icon\": \"2.png\"},\"silence et Grillons - Chambres d\'hotes\": { \"lat\":43.6621954945,\"lon\":6.1093344495,\"icon\": \"2.png\"},\"Mas le Chêne - Location vacances\": { \"lat\":43.4999161000,\"lon\":6.1666933000,\"icon\": \"3.png\"},\"La Bastide des Pignes - Chambres d\'hôtes\": { \"lat\":43.6644290000,\"lon\":6.1136420000,\"icon\": \"2.png\"},\"Le Mas Provencal - Chambres d\'hôtes\": { \"lat\":43.6639400000,\"lon\":6.1146900000,\"icon\": \"2.png\"},\"Mas de L\\\' Olivette - Chambres d\'hôtes\": { \"lat\":43.5250500000,\"lon\":6.1860200000,\"icon\": \"2.png\"},\"Jas de la Rimade - Location Vacances\": { \"lat\":43.4620900000,\"lon\":6.1369700000,\"icon\": \"3.png\"},\"Les Chênes d\\\'Or - Locations Vacances\": { \"lat\":43.6558973167,\"lon\":6.1441576121,\"icon\": \"3.png\"},\"la Bastide de la Messine - Chambres d\'hôtes\": { \"lat\":43.4122300000,\"lon\":6.0433600000,\"icon\": \"2.png\"},\"Hôtellerie du Couvent Royal ***\": { \"lat\":43.4532900000,\"lon\":5.8635200000,\"icon\": \"1.png\"},\"Hôtel De France ****\": { \"lat\":43.4531600000,\"lon\":5.8603100000,\"icon\": \"1.png\"}}",true);
0
Merci beaucoup Jordane !
Voici le code php, je testerai ton script dès que possible.
Je suis déjà passé par des validators et le JSON a l'air valide, mais je revérifierai.
Encore merci pout ton aide.
JF
0
J'ai testé ta suggestion mais cela ne marche pas:
http://www.planeteprovence.com/tests/variables_par_JSON2.php
et
http://www.planeteprovence.com/tests/exemple_data2.php
Peut-être me suis-je planté ?
Quant au JS, il y a déjà un parse ligne 43, je mets le code dans un autre post.
<?php
$myObj->longitude = 6.0077500000;
$myObj->latitude = 43.5571560000;
$myObj->varvillage = 12;
$myObj->donnees = json_decode("{\"Gîtes de la Réparade - Locations vacances\": { \"lat\":43.5066550000,\"lon\":6.0154220000,\"icon\": \"3.png\"},\"Le Vallon des Palombes - Chambres d\'hôtes\": { \"lat\":43.5865420000,\"lon\":6.1019080000,\"icon\": \"2.png\"},\"La Demeure de Fanette - Chambres et restaurant\": { \"lat\":43.5840707000,\"lon\":6.1096542000,\"icon\": \"2.png\"},\"Maison Provençale - Locations vacances\": { \"lat\":43.5336219672,\"lon\":6.1229978249,\"icon\": \"3.png\"},\"La Bastide des Templiers - Chambres d\'hôtes\": { \"lat\":43.4754924092,\"lon\":5.9604476743,\"icon\": \"2.png\"},\"Le Mas des Tours - Chambres d\'hôtes\": { \"lat\":43.5311890000,\"lon\":6.1481170000,\"icon\": \"2.png\"},\"La Maison de Marlin - Location vacances\": { \"lat\":43.5291710000,\"lon\":6.1485830000,\"icon\": \"3.png\"},\"Le Pra de Pe - Chambres d\'hôtes\": { \"lat\":43.5275700000,\"lon\":6.1481400000,\"icon\": \"2.png\"},\"Chambres Conde\": { \"lat\":43.5290670000,\"lon\":6.1487290000,\"icon\": \"2.png\"},\"La Licorne - Chambres d\'hôtes\": { \"lat\":43.5279000000,\"lon\":6.1483200000,\"icon\": \"2.png\"},\"Domaine de Cornillières - Locations vacances\": { \"lat\":43.4734290000,\"lon\":5.9169186000,\"icon\": \"3.png\"},\"Mme Maestri - Location Vacances\": { \"lat\":43.5276700000,\"lon\":6.1495700000,\"icon\": \"3.png\"},\"Domaine de Nestuby - Chambres d\'hôtes\": { \"lat\":43.5037400000,\"lon\":6.1364100000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Chambres d\'hôtes\": { \"lat\":43.4622500000,\"lon\":5.9368000000,\"icon\": \"2.png\"},\"La Basse Combe - Location Vacances\": { \"lat\":43.5294651893,\"lon\":6.1521526475,\"icon\": \"3.png\"},\"Mon Cabanon - Location Vacances\": { \"lat\":43.5121000000,\"lon\":6.1490700000,\"icon\": \"3.png\"},\"Les Oliviers - Chambres d\'hôtes\": { \"lat\":43.5205100000,\"lon\":6.1539400000,\"icon\": \"2.png\"},\"Une Campagne en Provence - Location Vacances\": { \"lat\":43.4532300000,\"lon\":5.9391100000,\"icon\": \"3.png\"},\"Le Chat Luthier - Chambres d\'hôtes\": { \"lat\":43.4748800000,\"lon\":6.1211000000,\"icon\": \"2.png\"},\"La Radassière - Chambres d\'hôtes\": { \"lat\":43.5232200000,\"lon\":6.1625700000,\"icon\": \"2.png\"},\"silence et Grillons - Chambres d\'hotes\": { \"lat\":43.6621954945,\"lon\":6.1093344495,\"icon\": \"2.png\"},\"Mas le Chêne - Location vacances\": { \"lat\":43.4999161000,\"lon\":6.1666933000,\"icon\": \"3.png\"},\"La Bastide des Pignes - Chambres d\'hôtes\": { \"lat\":43.6644290000,\"lon\":6.1136420000,\"icon\": \"2.png\"},\"Le Mas Provencal - Chambres d\'hôtes\": { \"lat\":43.6639400000,\"lon\":6.1146900000,\"icon\": \"2.png\"},\"Mas de L\\\' Olivette - Chambres d\'hôtes\": { \"lat\":43.5250500000,\"lon\":6.1860200000,\"icon\": \"2.png\"},\"Jas de la Rimade - Location Vacances\": { \"lat\":43.4620900000,\"lon\":6.1369700000,\"icon\": \"3.png\"},\"Les Chênes d\\\'Or - Locations Vacances\": { \"lat\":43.6558973167,\"lon\":6.1441576121,\"icon\": \"3.png\"},\"la Bastide de la Messine - Chambres d\'hôtes\": { \"lat\":43.4122300000,\"lon\":6.0433600000,\"icon\": \"2.png\"},\"Hôtellerie du Couvent Royal ***\": { \"lat\":43.4532900000,\"lon\":5.8635200000,\"icon\": \"1.png\"},\"Hôtel De France ****\": { \"lat\":43.4531600000,\"lon\":5.8603100000,\"icon\": \"1.png\"}}",true);

$myJSON = json_encode($myObj);

echo $myJSON;
?>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
4 juin 2019 à 15:58
Ton json n'est pas valide...
Pourquoi, d'ailleurs, vouloir stocker en json dans la variable donnees ??
Moi je ferai plutôt un array....
0
JFLeroi > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
4 juin 2019 à 16:18
J'ai besoin de passer 4 variables dont une Object (données) et comme cela fonctionnait côté console (les valeurs sont identiques, je pensais pour les exploiter comme en dur...
0