Fra*_*sco 0 javascript php json encode
我曾经json_encode($array);把数组转换为json.
[{"x":1418736600,"y":"82.2"},{"x":1418736900,"y":"82.2"}]
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是一个JavaScript对象,如下所示:
[{x:1418736600,y:"82.2"},{x:1418736900,y:"82.2"}]
Run Code Online (Sandbox Code Playgroud)
为了简化它我想要一个没有引用键的JSON,但最好避免解析什么json_encode输出并使用更直接的方式.
是否可以在PHP中执行此操作?
除了使有效载荷稍微小一些之外,没有必要这样做.输出json_encode是有效的JavaScript代码,如果在期望值的地方使用,例如:
var x = <?php echo json_encode($array); ?>;
Run Code Online (Sandbox Code Playgroud)
引用的属性键是有效的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); ?>;
Run Code Online (Sandbox Code Playgroud)
这假设任何只包含AZ,az,0-9,_或$之间的双引号后跟冒号的任何内容都是一个键并删除引号.(这不是有效的JavaScript标识符字符的完整列表,它只是一个示例.)
但似乎我不太可能节省开支.
当然,要正确地执行此操作,您必须自己执行序列化程序.它不会那么难,只是一个处理下降到数组和对象的递归函数.它仍然可以json_encode用于值.