Нужен ли мне json.parse, если я использовал json_encode()?

#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), и вам необходимо преобразовать ее из строки в полезный объект.