PHP: разбор JSON из jQuery - PullRequest
       3

PHP: разбор JSON из jQuery

2 голосов
/ 14 января 2010

Я пытаюсь разобрать простую строку JSON, но я не привык делать это из PHP. Чтобы сделать мой тест, я написал страницу, где создаются данные; отправляет запрос на страницу PHP для выполнения некоторых тестов.

Как мне получить доступ к данным JSON из PHP и вернуть их обратно?

Строка из 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:

<?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 ]

8 голосов
/ 14 января 2010

json_decode со вторым параметром, установленным в true, превращает элемент JSON в массив php.

Таким образом, чтобы получить доступ к элементу в вашем примере, вы должны использовать

$data_back['id_list'][0]['id']
1 голос
/ 14 января 2010

Поскольку вы используете $ .post jQuery, вы можете использовать суперглобальный $ _POST в своем PHP. Всегда хорошая идея использовать определенный суперглобальный вместо $ _REQUEST.

Посмотрите документацию по json_decode: http://us.php.net/manual/en/function.json-decode.php

Поскольку вы передаете второй аргумент TRUE, возвращаемое значение будет ассоциативным массивом. Как только ваш JSON будет декодирован, это будет структура массива:

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)

Теперь вы можете легко получить доступ к членам массива!

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

Вот оба рефакторинговых скрипта для справки.

<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
1 голос
/ 14 января 2010

Это будет просто

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

Объекты в формате JSON преобразуются в собственный объект PHP, массивы преобразуются в собственные массивы, если только вы не используете для параметра $ assoc значение true в функции json_decode,в этом случае данные JSON преобразуются в собственный ассоциативный массив php.

См. http://us.php.net/json_decode

0 голосов
/ 14 января 2010

Вы можете рассмотреть возможность использования одного из плагинов jQuery, чтобы немного упростить ситуацию. Анализ JSON и Stringification в jQuery (как плагин) Эта короткая статья выглядит так, как будто может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...