Чтение ассоциативного массива из json в $_POST
Я использую jQuery для размещения json-объекта в моем приложении php.
jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });
Строка json, вытащенная из firebug, выглядит следующим образом:
{ "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
В php я пытаюсь превратить это в ассоциативный массив.
Мой php-код пока
<?php
$value = json_decode(stripcslashes($_POST));
echo $value['page'];
?>
Ответ на вызов ajax должен быть "about_us.php", но он возвращается обратно.
Ответы
Ответ 1
Вы можете избежать использования JSON.stringify
и json_decode
:
jQuery.post("save.php", dataToSend, function(data){ alert(data); });
и
<?php
echo $_POST['page'];
?>
Update:
... но если вы действительно хотите их использовать, тогда:
jQuery.post("save.php", {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });
и
<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>
Ответ 2
$_POST
не будет заполняться, если тело запроса не находится в стандартной ур-кодированной форме.
Вместо этого прочитайте из потока только для чтения php://input
, чтобы получить тело необработанного запроса:
$value = json_decode(file_get_contents('php://input'));
Ответ 3
Передайте второй аргумент как истинный, если вы хотите, чтобы ассоциативный массив оставил возвращаемый объект.
$value = json_decode(stripslashes($_POST),true);
Ответ 4
Try:
echo $value->page;
так как json_decode
поведение по умолчанию - вернуть объект типа stdClass
.
В качестве альтернативы, установите второй необязательный аргумент $assoc
в true
:
$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
Ответ 5
Похоже, что jQuery может кодировать объект javascript в urlencoded form, а затем будет заселен в $_POST. По крайней мере, из их примеров. Я бы попытался передать объект в post()
без его подделки.
Ответ 6
Если вы хотите использовать json-данные в качестве ассоциативного массива, вы можете попробовать следующее:
<?php
$json = 'json_data'; // json data
$obj = jsondecode($json, true); // decode json as associative array
// now you can use different values as
echo $obj['json_string']; // will print page value as 'about_us.php'
for example:
$json = { "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
$obj = json_decode($json, true);
/* now to print contents from data */
echo $obj['data']['contents'];
// thats all
?>