最近遇到个头疼事儿:PHP数组弄成JSON格式老错。JSON虽然是Web开发常见项,但真要整明白不简单。我钻研好久才摸出点儿窍门,给大家分享下,希望能帮上忙。
错误1:JSON编码失败
我上次遇到件特别离谱的事儿,就是用PHP的json_encode处理数组,结果竟然输出个只有”假的false”的字符串,根本没报错。当时我直接傻眼了。后来查了下,发现问题出在我的数组中有个元素竟然会指向它本身,这就是传说中的“循环引用”。
碰上循环引用导致JSON_ENCODE()出错?别急,就这么处理:把数组顺序弄好就行!听说还有个叫JSON_UNESCAPED_SLASHES的神奇选项,它可以直接忽略已经被转义过的斜杠。有时候这个功能就能轻松解决循环引用的问题!
错误2:UTF-8编码问题
我也遇到过这种情况,就是想把PHP数组弄成JSON形式,然后搞砸了!因为JSON要用UTF-8编码,但是我的数据里有一些不是用这个编码的,所以就出问题。
搞定这个麻烦事,首先得看看你手机上用的文本编辑器和PHP文件是否都设置为了UTF-8编码。一种简单方法是用json_encode()函数里的JSON_UNESCAPED_UNICODE功能,或者直接用mb_convert_encoding()让所有的字符统一转为UTF-8编码格式,这样就能解决UTF-8编码问题了,最后得到的JSON字符串也会准确无误!
错误3:格式错误
跟你说个事,我以前也碰到过,就是JSON字符串的格式不对。记得上次,我把PHP数组变成JSON,居然没给属性名加引号,那JSON解析器可懵了,看不懂啥意思了。
解决这问题其实挺容易滴,首先就是要瞅瞅咱们PHP生成的那堆数组中,人名那里有木有被两撇引号括着哦;再者,你还能上网搜搜看有没有JSON格式校验器这种东西,帮咱看看给的那个JSON字符串符不符合规定。这么一搞,JSON字符串啥毛病都没了!
实战案例
有一次,我需要将以下这个PHP数组转换成JSON:
php $arr=array($array = ['foo', ['bar' => $array]]; // 循环引用 $json = json_encode($array, JSON_UNESCAPED_SLASHES); // 解决循环引用"name"=>"张三",
"age"=>28,
我喜欢打篮球、踢足球和打乒乓球。
);你知道JSON为啥老是出现奇怪的字符吗?其实就是因为里面有个“张三”的字是用了GBK编码。只要改成UTF-8就能解决!
搞定了,我用了个mb_convert_encoding小工具,把”张三”转成utf-8格式~
咱得给那”name”换个新名字,别忘了先从UTF-8换成GBK!
首先,就用这个叫做json_encode的魔法工具,把你的数组变身为JSON格式!
来给数组”$arr”施个”$json”魔法,就可以得到没被转义过的UnicodeJSON!具体操作是找我们的小助手json_encode来帮忙。
这次,我终于得到了正确的JSON字符串:
“`json
大名张三,今年二十八。喜欢运动,打篮球、足球还有乒乓。
$array = [ 'name' => 'John Doe', 'age' => 30, 'address' => ['street' => 'Main Street', 'city' => 'Anytown'] ];总结
把PHP变成JSON可不是闹着玩儿的!尤其得小心循环引用、UTF-8编码和正确的JSON格式什么的…这些都搞定了,处理起常规格式的JSON字符串就变简单!
哈喽!打断一下,还有点儿事儿没说完,就是你们在用PHP弄数组转JSON大法时有啥问题没有?那问题咋解决的捏?赶紧到评论区分享一下,大家一起进步嘛~别忘了给这回答点赞,也能帮帮其他小白。
$json = json_encode($array, JSON_UNESCAPED_SLASHES); echo $json; // 输出:{"name":"John Doe","age":30,"address":{"street":"Main Street","city":"Anytown"}}
评论0