2 Stimmen

PHP: Parsen von JSON aus jQuery

Ich versuche, eine einfache JSON String, aber ich bin es nicht gewohnt, das von PHP . Um meinen Test zu machen, habe ich eine Seite geschrieben, wo die Daten erstellt werden; sendet Anfrage an PHP-Seite, um einige Tests zu tun.

Wie kann ich von PHP aus auf die JSON-Daten zugreifen und sie zurückerhalten?

Die Zeichenfolge aus 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);
});

PHP-Seite:

<?php

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

?>

8voto

eCaroth Punkte 531

Json_decode mit dem zweiten Parameter true verwandelt das JSON-Element in ein php-Array.

Um also auf das Element in Ihrem Beispiel zuzugreifen, würden Sie verwenden

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

1voto

Andy E Punkte 324972

Es wäre nur eine

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

Objekte im JSON-Format werden in ein natives PHP-Objekt umgewandelt, Arrays werden in native Arrays umgewandelt, es sei denn, Sie setzen den Parameter $assoc in der Funktion json_decode auf true, in diesem Fall werden die JSON-Daten in ein natives assoziatives Array umgewandelt.

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

1voto

simeonwillbanks Punkte 1459

Da Sie jQuery's $.post verwenden, können Sie die $_POST superglobal in Ihrem PHP verwenden. Es ist immer eine gute Idee, eine spezifische superglobale Variable anstelle von $_REQUEST zu verwenden.

Werfen Sie einen Blick in die json_decode-Dokumentation: http://us.php.net/manual/en/function.json-decode.php

Da Sie als zweites Argument TRUE übergeben, wird der zurückgegebene Wert ein assoziatives Array sein. Sobald Ihr JSON dekodiert ist, wird dies die Array-Struktur sein:

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)

Jetzt können Sie ganz einfach auf die Mitglieder des Arrays zugreifen!

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

Hier sind beide überarbeiteten Skripte als Referenz.

<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

0voto

Jason Brant Punkte 182

Um die Sache etwas zu vereinfachen, könnten Sie eines der jQuery-Plugins verwenden. JSON-Parsing und Stringifying in jQuery (als Plugin) Dieser kurze Artikel könnte helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X