json_decode的结果为null,json_encode的结果为

      首先,楼主在写接口的时候,是用laravel查询数据库,然后对返回的结果进行:json_decode(json_encode($ret),true),,本以为能顺利的转化为json字符串输出的,结果却发现结果为null,因此记录一下。

一、json_decode($str,true)的结果为null

1、原因:
(1)$str只能UTF-8编码

(2)元素最后不能有逗号(与php的array不同)

(3)元素不能使用单引号

(4)元素值中间不能有空格和n,必须替换

2、解决方案:

$data = stripslashes(html_entity_decode($info)); 
//$info是传递过来的json字符串
$data = json_decode($data,TRUE);
//这时候$data就是解析后的数组了!
//html_entity_decode() 函数的作用是把 HTML 实体转换为字符。
//stripslashes() 函数的作用是删除反斜杠。

二、js_encode的结果为false

1、是的,在我排除json_decode为null的问题之后,我发现我的json_encode的结果竟然为false,很无奈,百度了一下,人家说主要原因就是字符格式的问题。php的json_encode($str)里面的str只能是UTF-8格式的。

2、解决方案:

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
} 

      网上找的代码是这个,但需要因大家的实际业务来写,比如我的$arr是个数组对象,而且用eval之后一直报错,所以我就直接改了下:

 $ret =iconv('GBK','UTF-8//IGNORE',var_export($arr,true));
   return MyResponse::success(json_decode(json_encode($ret),true),200);

这样就OK了,成功的输出了json字符串

三、遇到的问题:

1、PHP的iconv()函数遇到的错误: Detected an illegal character in input string …

      原因:你要转换的数组中含有iconv()函数不认识的字符,可能是繁体字,也可能是反斜杠等。
      解决方案:
(1) 扩大输出字符编码的范围,如把GBK2312改为GBK.
(2) 在输出的字符编码字符串后面加上”//IGNORE”,如iconv(‘GBK’,’UTF-8//IGNORE’,var_export($arr,true)),这样做其实是忽略了不能转换的字符,避免了出错但却不能够正确地输出(即空白不、输出)。

2、 eval()’d code line 3:

解决方案:
(1)查看你的代码,要知道eval()里面输出的必须是符合php规范的,也就是逗号,分号,一个都不能少
(2)注意有没有漏掉反斜杠,如:
eval("if ($strif) {\$ifFlag=true;}else{\$ifFlag=false;}");
eval("if  (\$strif) {\$ifFlag=true;}else{\$ifFlag=false;}");

上面的因为少个反斜杠,所以报错了。。

end

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值