如何将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一样,不能用一个正则表达式正确解析),但在有限的域内,你可能可以做到这一点。例如,这里有一个天真的版本,它可能适用于许多数据集,包括你的示例,但无论如何,它都不会适用于所有数据集:

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

这假设任何仅由A-Z、A-Z、0-9、_或$组成的双引号后面紧跟冒号的内容都是键,并删除引号。(这不是有效JavaScript标识符字符的完整列表,只是一个例子。)

但在我看来,这些积蓄不太可能值得花这么多钱。

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