2010-01-14 5 views
2

J'essaye d'analyser une chaîne simple JSON, mais je ne suis pas habitué à le faire de PHP. Pour faire mon test j'ai écrit une page où les données sont créées; envoie une requête à la page PHP pour faire quelques tests.PHP: parse JSON de jQuery

Comment puis-je accéder aux données JSON depuis PHP et les faire revenir?

La chaîne de jQuery:

var json_str = '{"id_list":[{"id":"2","checked":"true"},{"id":"1","checked":"false"}]}'; 
/*'{ 
    "id_list": [ 
     { 
      "id": "2", 
      "checked": "true" 
     },{ 
      "id": "1", 
      "checked": "false" 
     } 
    ] 
}'*/ 
$.post ("php_json_parser.php", { data_to_send:json_str }, function (data_back) { 
    alert (data_back); 
}); 

page PHP:

<?php 

$data_back = json_decode (stripslashes($_REQUEST['data_to_send']), true); 
print $data_back->{'id_list'[0]["id"]}; //??? how can I access to properties? 

?> 
+0
+0

Il semble qu'il utilise PHP 5.2 qui a des fonctions json natives. –

+0

oui, je l'utilise déjà – vitto

Répondre

8

json_decode avec le second paramètre est défini sur true transforme l'élément JSON dans un tableau php.

Donc, pour accéder à l'élément dans votre exemple, you'de utiliser

$data_back['id_list'][0]['id'] 
+0

merci, c'était exactement ce que je cherchais – vitto

1

Il serait juste

print $data_back->id_list[0]->id; 

objets au format JSON sont convertis en un objet PHP natif, les tableaux sont convertis en tableaux natifs, sauf si vous utilisez le paramètre $ assoc à true dans la fonction json_decode n, auquel cas les données JSON sont converties en un tableau associatif natif php.

Voir http://us.php.net/json_decode

1

Puisque vous utilisez jQuery de .post $, vous pouvez utiliser $ _POST superglobale dans votre PHP. C'est toujours une bonne idée d'utiliser un superglobal spécifique au lieu de $ _REQUEST.

Jetez un oeil à la documentation json_decode: http://us.php.net/manual/en/function.json-decode.php

Puisque vous le deuxième argument de TRUE, la valeur retournée sera un tableau associatif. Une fois que votre JSON est décodé, ce sera la structure de tableau:

array 
    'rda' => 
    array 
     0 => 
     array 
      'id' => string '2' (length=1) 
      'checked' => string 'true' (length=4) 
     1 => 
     array 
      'id' => string '1' (length=1) 
      'checked' => string 'false' (length=5) 

Maintenant, vous pouvez facilement accéder aux membres de la matrice!

echo $data_back['rda'][0]['id']; // 2 

Voici les deux scripts refacturés pour référence.

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    jQuery(document).ready(function() { 
     var json_str = '{"rda":[{"id":"2","checked":"true"},{"id":"1","checked":"false"}]}'; 
     jQuery("a").click(function() { 
      $.post("/test/parser", { data_to_send:json_str }, function (data_back) { 
          $("div").html (data_back); 
      }); 
     }); 
    }); 
    </script> 
</head> 
<body> 
<a href="#">post</a> 
<!-- put decoded json in div --> 
<div></div> 
</body> 
</html> 


$data_back = json_decode($_POST['data_to_send'], true); 
echo $data_back['rda'][0]['id']; // 2