如果我使用过 json_encode(),我需要 json.parse 吗?

问题描述

正在进行一些广泛的测试,以了解如何成功地将 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","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() 导致无需使用 JSON.parse() 的有效 JS?

解决方法

是的,它是有效的,因为 JSON 语法是 JavaScript 对象字面量语法的一个子集。因此,如果您按照您展示的方式将 JSON 编码的文本注入到生成的 JS 代码中,那么它的行为就像一个对象字面量,就像您手工编写的一样。

如果您将包含 JSON 编码文本的字符串接收到 JavaScript 变量中(例如作为 AJAX 请求的结果),并且需要将其从字符串转换为可用对象,则需要

JSON.parse