`
moqiang02
  • 浏览: 529214 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

php使用json_decode返回NULL

 
阅读更多

php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格。

很可能使用该函数得到的返回值是NULL

可以使用使用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();
echo $errorinfo;  //错误信息会在客户端的页面显示,错误代码如下0-5
//print_r(JSON_ERROR_DEPTH);
print_r($jd);

0 = JSON_ERROR_NONE 没有错误发生
1 = JSON_ERROR_DEPTH 超过了最大堆栈深度
2 = JSON_ERROR_STATE_MISMATCH 无效的或者是有缺陷的json
3 = JSON_ERROR_CTRL_CHAR 发生控制特性错误,可能是有误的编码
4 = JSON_ERROR_SYNTAX 发生语法错误
5 = JSON_ERROR_UTF8Malformed UTF-8 有缺陷的UTF-8编码特性,也可能是有误的编码 PHP 5.3.3


分享到:
评论

相关推荐

    PHP 获取JSON json_decode返回NULL解决办法

    PHP 获取JSON json_decode返回NULL解决办法,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,这样处理才能正确解析json数据

    Json_decode 解析json字符串为NULL的解决方法(必看)

    下面小编就为大家带来一篇Json_decode 解析json字符串为NULL的解决方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    PHP json_encode() 和 json_decode()

    NULL 博文链接:https://onestopweb.iteye.com/blog/2380018

    有关json_decode乱码及NULL的问题

    这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode()。 json_decode(): 对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串并且把它转换为 PHP 变量。 (1)将数据转换成数组之后,打印会...

    jQuery JSON with PHP json_encode and json_decode

    NULL 博文链接:https://shiren1118.iteye.com/blog/309232

    PHP处理Json字符串解码返回NULL的解决方法

    一般来说,php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array;若为false,返回object。如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示。如...

    关于php中的json_encode()和json_decode()函数的一些说明

    一,json语法( php中的json_decode($json)中的$json要符合json语法格式 ) ① JSON可以表示三种类型的值 1,简单值。包括整型,字符串型,布尔值和null。例如:5,”hello world”,true,null都是有效的JSON数据。...

    PHP json_decode函数详细解析

    程序接到后用json_decode把结果转化成数组,但转化的结果是null,太奇怪了。 看了一下手册,在手册中发现了下面的说明,一下就明白了。把返回的结果改成'{“stauts”:”1″,”message”:”充值成功”}

    PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠

    通过AJAX传到PHP的json字符串有时候加上反斜杠”\”来转义,PHP处理时需要先去掉反斜杠,然后再json_decode. $str = stripslashes($_POST['json']); $arr = json_decode($str,true); PS:php get抓取json怎样去除...

    php判断是否为json格式的方法

    首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: 复制代码 代码如下: function is_not_json($str){   return is_null(json_decode($str)); } 判断数据是合法的json数据: ...

    微信公众接口开发教程,菜鸟包会!

    但如果直接返cURL返回的字符串json_decode返回的居 然是NULL,他试了N多办法最终没有搞定,如是就问我要怎么处理。我当时也想了很多办法,后来发现是编码的问题,改成UTF-8的编码就OK了。 这中间不可避免的谈到了...

    php解析http获取的json字符串变量总是空白null

    今天同事项目中遇到一个问题,通过http接口获取的json字符串使用json_decode始终无法正确解析,返回空白。 直接把结果字符串复制出来手动创建一个变量却正常,在前端js也能解析,搞了半天不得其解,借助强大的谷歌...

    php json转换成数组形式代码分享

    写的json转换成数组的一个类和方法,实际上写的方法可以...is_string($json) || is_null(json_decode($json, true)))  throw new NotJsonStringException(‘param is not a json string’);  $deJson = json_decode

    Connect_PHP_SDK_for_OAuth2_V1.2_new

    PHP5.2 + (json_decode函数需要) 开启Curl模块:检查方式是 写一个 phpinfo();的测试文件,需要找到curl的描述方可有效。 如果选择数据库,需要开启mysql。(适用于中型网站) 如果选择MemCache,需要开启...

    whatsapp-api-php:适用于PHP的Whatsapp非官方API。 非常容易和非常快速

    Whatsapp Api Php 适用于PHP的Whatsapp非官方API。 非常容易和非常快速。 例子<...print_r(json_decode($messages));*//*$opt = [ 'page'=> null, 'limit'=>null, 'phone'=>null];$incoming_mess

    http-request:使用HTTP协议进行简单工作的库

    ... json_decode ( $ http -> body ()) : null ; } catch (\ Garik \ HttpRequestException $ e ) { exit ( $ e -> getMessage ()); } 使用具有自己标题的POST方法提交表单 $ http = \ Garik \ H

    PHP微信支付WxPayPubHelper

    $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } /** * 作用:以post方式提交xml到对应的接口url */ public ...

    简化版的JSONJSONLite.zip

    $value = jsonlite_decode($json); var_export($value); /** * array ( * 'code' => 123, * 'msg' => 'true str', * 'null' => NULL, * 'new' => '', * 'double' => 1, * ) */ 体积对比 根据...

    ThinkPHP3.2 集成 php-resque: PHP Resque Worker

    $argv = json_decode(getenv('Q_ARGV')); foreach ($argv as $item) { if (strpos($item, '=')) { list($key, $val) = explode('=', $item); } else { $key = $val = $item; } $this->keys[] = $key; $...

    微信或其他借用天气api的400个城市id参数

    根据传入的城市名 得到城市代码 如果不为空 则调用中国天气网的API进行查询 返回json格式的数据 然后进行解析并返回数据 如果为空 则返回null值 ">微信或其他借用天气api的城市id参数 调用的是中国国家气象局提供的...

Global site tag (gtag.js) - Google Analytics