如何将 PHP 对象序列化为 JavaScript 对象(不是 JSON)

How to serialize a PHP object into a JavaScript object (Not JSON)

我使用 json_encode($array); 将数组转换为 json。

[{"x":1418736600,"y":"82.2"},{"x":1418736900,"y":"82.2"}]

但我真正需要的是一个 JavaScript 对象,如下所示:

[{x:1418736600,y:"82.2"},{x:1418736900,y:"82.2"}]

简而言之,我想要 JSON 而不引用键,但最好避免解析 json_encode 输出的内容,而是使用更直接的方式。

是否可以在 PHP 中执行此操作?

除了使负载非常小之外,没有必要这样做。 json_encode 的输出是有效的 JavaScript 代码,如果在需要值的地方使用,例如:

var x = <?php echo json_encode($array); ?>;

引用的 属性 密钥有效 JavaScript。 JSON 作为一个整体,实际上是 JavaScript 文字语法的一个子集。

可以在结果中抛出一个正则表达式。它可能永远不会完美(JSON,如 HTML,不能用单个正则表达式正确解析),但在有限的域内,您也许可以做到。例如,这是一个可能适用于许多数据集的原始版本,包括您的示例,尽管它再次 not 以任何方式处理所有数据集:

<?php
$str = json_encode($array);
$str = preg_replace('/"([A-Za-z0-9_$]+)":/', ':', $str);
?>
var x = <?php echo json_encode($array); ?>;

这假设任何仅由 A-Z、a-z、0-9、_ 或 $ 组成的双引号之间紧跟一个冒号的是键并删除引号。 (这不是有效 JavaScript identifier characters 的完整列表,它只是一个示例。)

但在我看来,节省下来的钱似乎不太值得。

当然,要正确执行此操作,您必须执行自己的序列化程序。它不会那么难,只是一个处理下降到数组和对象的递归函数。它仍然可以使用 json_encode 作为值。