如何将 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
作为值。
我使用 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
作为值。