Json 格式在现在的开发中应用十分广泛,作为数据传输格式,其有着特别的优势。在PHP中json_encode和json_decode可以进行Json格式数据的转化,json_encode函数可以直接将数组转成 Json格式,而json_decode函数可以直接将Json格式数据转化为数组或者对象。
一般情况下,你可能没有什么发现这两个函数有什么问题。但是有时你有可能在使用json_encode函数或者 json _decode函数时,会无奈的发现结果变成null了。这是什么原因呢?
json_encode结果为null
Json只支持转义 UTF-8 编码格式的中文,如果被编码的中文不是UTF-8格式,而是 GBK 或者GB2312格式,json_encode函数在进行编码时,结果就会变成null。这个情况一般出现在文档编码或者输出的内容编码是非UTF-8时。
所以如果你的程序是采用utf-8编码,请确保文件保存时是使用为utf-8 无bom格式,如果你的程序是gbk格式的,可以先将其转成utf-8格式,然后再使用json_encode函数。
json_decode结果为null
json_decode函数对json 字符串 的格式要求非常严格,对于不符合格式的json字符串,使用此函数解析,结果会返回null。在结果返回null时,我们可以使用json_last_error()函数获取返回值来判断出问题的原因。
1、编码格式问题
json字符串的编码格式必须是utf-8格式的。 这里有两种查看字符串编码格式的方法:
①:在浏览器中按F12,找到meta标签,charset后面就是编码格式。
②:使用mb_detect_encoding函数,返回值就是字符串的编码格式。
如果确定是编码格式问题的话,就用 iconv ()函数来 转码 。
2:json语法错误
如果感觉是语法错误的话最好百度一个工具来测试一下到底是哪里的语法错误。 用法很简单,把json字符串复制进去之后按“校验”按钮即可。
①:json字符串两遍必须以双引号来包含。
②:json对象中最后一个元素后面不能有逗号。
③:json字符串不能含有bom头。去掉bom头可以使用如下方式: