php json解码返回null6,php使用json_decode失败返回NULL 编码或者bom问题

本文介绍了在处理JSON数据时可能出现的NULL返回值问题,包括JSON编码错误和格式错误。建议使用json_last_error()函数定位错误,并给出了四种排错方法:1.将单引号替换为双引号;2.确保JSON字符串为UTF8编码;3.删除多余的逗号;4.移除换行和制表符。同时提到了PHP5.3.3在处理UTF-8文件时的BOM问题及简单的解决方案。
摘要由CSDN通过智能技术生成

很可能使用该函数得到的返回值是NULL,没有返回数组只有可能要么是编码问题,要么就是json返回的数据又特殊字符别无其他原因,下面是解决方法:

可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。

其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误。

可以通过以下几个方式排错:

1. json字符串必须以双引号包含

$output = str_replace("'", '"', $output);

2. json字符串必须是utf8编码

$output = iconv('gbk', 'utf8', $output);

3.不能有多余的逗号 如:[1,2,]

用正则替换掉,preg_replace('/,\s*([\]}])/m', '$1', $output)

4、不能有换行、制表符:

$jsonstr='

{"succ":true,"data":{"id":"31","keywords":"","description":"","jianjie":" ","jianjie_short":"bb","nav":"ccc","deleted":"0","url":"http:\/\/travel.sina.com.cn\/beijing\/

"}}';

//$ret=preg_replace("/\t/", " ", $ret);

//$jsonstr = preg_replace("/\n/", ' ', $jsonstr);

$jsonstr=str_replace("\n",' ',$jsonstr);

//print_r($jsonstr);exit;

//$jsonstr = str_replace ('\n','', $jsonstr);

$jd=json_decode($jsonstr,true);

$errorinfo=json_last_error();

//print_r(JSON_ERROR_DEPTH);

print_r($jd);

//-------------------------------------------------

0 = JSON_ERROR_NONE No error has occurred

1 = JSON_ERROR_DEPTH  The maximum stack depth has

been exceeded

2 = JSON_ERROR_STATE_MISMATCH  Invalid or

malformed JSON

3 = JSON_ERROR_CTRL_CHAR Control character error, possibly

incorrectly encoded

4 = JSON_ERROR_SYNTAX Syntax error

5 = JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly

incorrectly encoded PHP 5.3.3

当对UTF-8编码的文件进行操作时,如果要把读取的内容当作文本内容来处理,最好先对BOM进行一些处理,这个问题在PHP6中得到了解决(可以设置文本/二进制读取模式),有兴趣的朋友可以自己查找PHP6的手册。

一个较简单的解决方法:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值