web-dev-qa-db-fra.com

comment obtenir des données en Javascript depuis JavaScript avec json_encode?

J'essaie de mapper des traceroutes sur Google Maps.

J'ai un tableau en php avec des données de traceroute comme

$c=ip,latitude,longitude, 2nd ip, its latitude, longitude, ....target ip, its lat, its lng

J'ai utilisé json_encode($c, JSON_FORCE_OBJECT) et sauvegardé le fichier

Maintenant, comment puis-je accéder à cela en utilisant javascript, en l'associant directement au nouvel objet JS?

plus tôt j'avais un format de données comme celui-ci sur le disque dur

var data12 = {

"route":[
{
    "ip": "some ip",

    "longitude": "some lng",

    "latitude": "some lat",

.....

et dans mon javascript, il a été utilisé comme

data=data12.route;

et puis simplement accéder aux membres en tant que données [1] .latitude

9
user494461

Je recommande d'utiliser la bibliothèque jQuery . La version réduite n’a que 31 ko et offre de nombreuses fonctions utiles.

Pour analyser JSON, il suffit de faire

var obj = jQuery.parseJSON ( ' {"name" : "John"} ' );

Vous pouvez maintenant accéder à tout facilement:

alert ( obj.name );

Remarque : jQuery utilise l’analyseur JSON natif du navigateur, le cas échéant, qui est très rapide et beaucoup plus sûr que la méthode eval ().

Edit : Pour obtenir des données du côté serveur au côté client, il existe deux possibilités:

1.) Utilisez une requête AJAX (assez simple avec jQuery):

   $.ajax ( {
       url: "yourscript.php",
       dataType: "json",
       success: function ( data, textStatus, jqXHR ) {
           // process the data, you only need the "data" argument
           // jQuery will automatically parse the JSON for you!
       }
   } );

2.) Écrivez l'objet JSON dans le code source Javascript lors de la génération de la page:

   <?php
       $json = json_encode ( $your_array, JSON_FORCE_OBJECT );
   ?>

   <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

   <script type="text/javascript">
   //<![CDATA[

   var json_obj = jQuery.parseJSON ( ' + <?php echo $json; ?> + ' );

   //]]>
   </script>
26
Sammy S.

Je pourrais obtenir le tableau JSON en utilisant json_encode () de PHP depuis le backend comme dans l'exemple suivant:

<!doctype html>
<html>
    <script type="text/javascript">
        var json = <?php echo json_encode(array(1 => '123', 'abc' => 'abd', 2 => 5));?>;
        console.log(json[1]);
        console.log(json.abc);
    </script>        
</html>

Pas de guillemets signifie un eval () de ce qui a été imprimé. C'est un hack rapide que nous avons souvent utilisé pour ajouter rapidement des valeurs initiales à notre page AJAX.

1
fred

Je sais que c'est vieux, mais je me suis récemment retrouvé à la recherche de cela. Aucune des réponses ici ne fonctionnait pour mon cas, parce que mes valeurs contenaient des citations. L'idée ici est de coder le tableau en base64 avant de faire écho à la page. Ainsi, les citations ne sont pas en conflit.

< ?php
$names = ['first' => "some'name"];
?>
var names = JSON.parse(atob('< ?php echo base64_encode(json_encode($names)); ?>'));
console.log(names['first']);
1
HoofHarted

Cette fonction fonctionne pour vous, je suppose:

    function json_encode4js($data) {
    $result = '{';
    $separator = '';
    $count = 0;
    foreach ($data as $key => $val) {

        $result .= $separator . $key . ':';
        if (is_array($val)){
            $result .= json_encode4js($val).(!$separator && count($data) != $count ? ",":"");
            continue;
        }
        if (is_int($val)) {
            $result .= $val;
        } elseif (is_string($val)) {
            $result .= '"' . str_replace('"', '\"', $val) . '"';
        } elseif (is_bool($val)) {
            $result .= $val ? 'true' : 'false';
        } elseif (is_null($val)) {
            $result .= 'null';
        } else {
            $result .= $val;
        }

        $separator = ', ';
        $count++;
    }

    $result .= '}';

    return $result;
}

$a = array(
"string"=>'text',
'jsobj'=>[
    "string"=>'text',
    'jsobj'=>'text2',
    "bool"=>false
    ],
"bool"=>false);

var_dump( json_encode4js($a) ); //output: string(77) "{string:"text", jsobj:{string:"text", jsobj:"text2", bool:false}, bool:false}" 

var_dump( json_encode($a));//output: string(85) "{"string":"text","jsobj":{"string":"text","jsobj":"text2","bool":false},"bool":false}"
0
Ahmet K AKARGUL

pas besoin de jquery, juste:

    var array= <?php echo json_encode($array); ?>;
    console.log(array->foo);
0
Sebastian Viereck

nous devons afficher le format d'encodage json en javascript, en utilisant ci-dessous un:

var responseNew = JSON.parse(' {"name" : "John"} ' );
alert(responseNew['name']);
0
Elangovan