#javascript #php #json #parsing #decode
Вопрос:
Я провожу обширное тестирование, чтобы узнать, как переменные PHP и JS, объекты, массивы и т. Д. Могут успешно передаваться друг другу. На эту тему есть много запутанных вопросов / ответов.
Насколько показало мое тестирование, я могу создавать различные объекты PHP:
$testarray = ["this", "is", "me"];
$testobject = (object) array("this"=>"that", "is"=>"was", "me"=>"him");
$teststring = "this is me";
$testint = 9758.25;
и тогда я смогу передать их json_encode()
(все еще на PHP)
echo '<script>
var testarray = '.json_encode($testarray).';
var testobject = '.json_encode($testobject).';
var teststring = '.json_encode($teststring).';
var testint = '.json_encode($testint).';
</script>';
и при запуске это приводит к:
<script>
var testarray = ["this","is","me"];
var testobject = {"this":"that","is":"was","me":"him"};
var teststring = "this is me";
var testint = 9758.25;
<script>
Я просто хочу подтвердить, что этот результат является и всегда будет абсолютно корректным JavaScript? Я не вижу в этом ничего плохого, но некоторые источники рекомендуют использовать JSON.parse()
. Нужно ли это в данном контексте?
Я знаю , что если бы массив или объект в JS был передан JSON.stringify()
, мне пришлось бы его анализировать.
Я также знаю, что для отправки объектов или массивов из JS в PHP мне пришлось бы использовать JSON.stringify()
и json_decode()
сделать их допустимыми, но, похоже, это json_encode()
приводит к допустимому JS без необходимости использования JSON.parse()
?
Ответ №1:
Да, это действительно так, потому что синтаксис JSON является подмножеством синтаксиса литералов объектов JavaScript. Поэтому, если вы введете кодированный JSON текст в сгенерированный JS-код так, как вы показали, он будет вести себя как объектный литерал, как если бы вы написали его там вручную.
JSON.parse
это потребуется, если вы получаете строку, содержащую текст в кодировке JSON, в переменную JavaScript (например, в результате запроса AJAX), и вам необходимо преобразовать ее из строки в полезный объект.