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

时间:2016-03-22 15:08:16

标签: javascript php json encode

我使用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中执行此操作?

1 个答案:

答案 0 :(得分:6)

除了使有效负载稍微小一点之外,没有必要这样做。 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 identifier characters的完整列表,只是一个例子。)

但似乎我不太可能节省开支。

要做到这一点,当然,你必须自己做系列化工具。它不会那么难,只是一个处理下降到数组和对象的递归函数。它仍然可以使用json_encode作为值。