PHP: jQuery JSON ayrıştırmak

4 Cevap php

Ben basit bir JSON dizesini ayrıştırmak çalışıyorum, ama ben PHP bunu yapmak için kullanılan değilim. Benim testo yapmak için php sayfasına gönderilen veriler oluşturulan bir js sayfa yazdı ve bazı test yapmak için geri iade ettik.

nasıl PHP veri json ve onları geri dönmek için erişebilir?

jQuery dize:

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);
});

php sayfası:

<?php

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

?>

4 Cevap

ayarlamak true ikinci parametre ile json_decode bir php diziye JSON öğeyi döner.

Yani, örneğin, you'de kullanımda öğeye erişmek için

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

Sadece olurdu

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

Eğer JSON veri bir php yerli ilişkisel dizi dönüştürülür durumda json_decode işlevi true $ Doç parametresini, dizilişi sürece JSON biçiminde nesneler, diziler yerli diziler dönüştürülür, bir doğal PHP nesnesine dönüştürülür.

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

Eğer JQuery'nin $. Sonrası kullanıyorsanız bu yana, sizin PHP $ _POST superglobali kullanabilirsiniz. $ _REQUEST Yerine belirli bir superglobali kullanmak için onun her zaman iyi bir fikirdir.

Take a look at the json_decode documentation: http://us.php.net/manual/en/function.json-decode.php

Eğer DOĞRU ikinci bir argüman geçiyoruz yana, döndürülen değeri bir ilişkisel dizi olacak. Lütfen JSON deşifre sonra, bu dizi yapısı olacak:

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)

Şimdi kolaylıkla dizinin üyeleri erişebilir!

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

İşte başvuru için hem refactored komut vardır.

<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

Eğer biraz şeyleri basitleştirmek için jQuery en eklentileri birini kullanmayı düşünebilirsiniz. O yardımcı olabilir gibi JSON Parsing and Stringifying in jQuery (as a plugin) Bu kısa makalede görünüyor.