php json 不带引号,php使用json与js交换数据——不带双引号的json数据解析
PHP和Javascript在某些方面总是惊人的相似,可是有时候却让人摸不着头脑。
案例1:Javascript原生支持的json格式,在编码上比PHP体积小,例如
$arr = array(array("name" => "php"));
$json = json_encode($arr);
echo $json;
//会输出[{"name":"php"}]
?>
而在Js中,上面的案例[{"name":"php"}]是可以被任何浏览器识别的,但是Javascript还支持更简单的写法var string = [{name:"php"}];
js可以省略属性名双引号,所以js占用体积小。可是,当我们使用js构造的json字符没有双引号直接传递给php之后,例如:
$json = '[{name:"php"}]';
$brr = json_decode($json, true);
var_dump($brr);
//坑爹的php竟然输出NULL
?>
介于这两种语言的差异,可以使用正则表达式来修正。
$json = '[{name:"php"}]';
$php = preg_replace('/(\w+)\s*:\s*/is', '"$1":', $json);
$crr = json_decode($php, true);
//这样就能正确解析js传入的json了
当然,如果你希望js从php获取的json的key不带双引号以节省传输量,还可以这样:
$arr = array(array("name" => "php"));
$json = json_encode($arr);
$js = preg_replace('/"(\w+)"\s*:\s*/is', '$1:', $json);
echo $js;
//将会输出:[{name:"php"}]
重大更新:如果你的数据非常简单,键值对中没有冒号,单双引号
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
