zoukankan      html  css  js  c++  java
  • json_decode的结果是null

    1、首先使用json_last_error确定问题

    $arrDataList = json_decode($content, TRUE);
    var_dump( json_last_error());

    1
    2
    3
          这段代码会打印出来一个数字,不同的数字代表不同的错误,如下:

    json_last_error错误msg对照表:
    0 = JSON_ERROR_NONE
    1 = JSON_ERROR_DEPTH
    2 = JSON_ERROR_STATE_MISMATCH
    3 = JSON_ERROR_CTRL_CHAR
    4 = JSON_ERROR_SYNTAX // 语法错误
    5 = JSON_ERROR_UTF8
    1
    2
    3
    4
    5
    6
    7
          我这边打印的结果是4,就是语法错误,明确错误之后继续往下找。

    2、常规排错

    (1)查看编码

    $content = mb_detect_encoding($jsonStr, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
    $json= mb_convert_encoding($content tent , "UTF-8", "GBK"); //将字符串转为UTF-8 (在知道字符串是gbk的时候使用,如果字符串已经是utf-8了,不要用这个函数)
    $json= mb_convert_encoding($str, "UTF-8", "auto"); //未知原编码,通过auto自动检测后,转换编码为utf-8
    1
    2
    3
          无效。

    (2)去掉boom头

    $jsonArr= json_decode(trim($jsonStr,chr(239).chr(187).chr(191)),true);
    1
          无效。

    (3) 格式: json字符串必须用双引号包含

    $jsonStr,chr= str_replace("'", '"', $jsonStr);
    1
          无效。

    (4)url_decode方式解码

    $jsonStr = urlencode(json_encode($jsonStr));
    $content = urldecode($jsonStr);
    转化的结果不再是null,但是json_decode($content , TRUE); 之后,结果仍为字符串。
    我们的目标是结果是数组,因此失败
    1
    2
    3
    4
          无效。

    (5)删除反斜杠,防止转义字符

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

    (6)字符串太多了?250W个字符

          根据文档,没有设定字符串的限定,只限定了递归深度,普通的解析深度都不会成为问题。

    三、最终问题
          在经过一系列的尝试之后,发现以上方法都是无效的,但json数据肯定是不对的。由于这个文件是经过版本控制的,因此查看改文件的修改记录,发现有同事修改过这个文件,导致少了一些东西。少的这部分字符通过以上方式都无法直接解决,直接通过svn还原了,一了百了,世界都安静了。

          不过以上的解决方案还是可以参考的,大部分json解析错误都能解决。
    ---------------------

  • 相关阅读:
    383. Ransom Note
    598. Range Addition II
    453. Minimum Moves to Equal Array Elements
    492. Construct the Rectangle
    171. Excel Sheet Column Number
    697. Degree of an Array
    665. Nondecreasing Array
    视频网站使用H265编码能提高视频清晰度吗?
    现阶段的语音视频通话SDK需要解决哪些问题?
    企业远程高清会议平台视频会议系统在手机端使用的必备要求有哪些?
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11097428.html
Copyright © 2011-2022 走看看