`

json_decode在php中的一些无法解析的字符串

 
阅读更多

关于json_decodephp中的一些无法解析的字符串,包括以下几种常见类型。

一、Bug#42186 json_decode()won'tworkwith\l

当字符串中含有\l的时候,json_decode是无法解析,测试代码:

echo "***********json_decode() won't work with \l*************<br/>";
$json = '{"stringwithbreak":"line with a \lbreak!"}';
var_dump($json);//stringwithbreak":"line with a \lbreak!
var_dump(json_decode($json, true));//null


解决办法:

主要是将\l进行替换,当然如果真的需要‘\l’,我们就必须不使用json_decode进行解析,可以当作当个字符进行提交。

var_dump(str_replace("\\l", "", $json));//stringwithbreak":"line with a break!
print_r(json_decode(str_replace("\\l", "", $json), true));//Array ( [stringwithbreak] => line with a break! ) 


二、TabsinJavascriptstringsbreakjson_decode()

当字符串中含有tab键时,json_decode()无法解析,例如代码3-1

echo "<br/>***********Tabs in Javascript strings break json_decode()*************<br/>";
var_dump(json_decode('{ "abc": 12, "foo": "bar	bar" }'));


执行后的返回结果为null

解决办法:

1、当遇到含有tab键输入的字符串时,我们应该避免使用json将数据传到php,然后使用php作为解析。

2、同样可以使用如下3-2代码方式进行替换

$myStr = '{ "abc": 12, "foo": "bar	bar" }';
$replaceStr = str_replace("	", "\\t", $myStr);
var_dump($replaceStr);
var_dump(json_decode($replaceStr ));


三、json_decodereturnsfalsewhenleadingzerosaren'tescapedwithdoublequotes

jsonvalue值为number类型,而且该number0开头,例如代码4-1

echo "<br/>***********json_decode returns false when leading zeros aren't escaped with double quotes*************<br/>";
$noZeroNumber = '{
  "test" : 6
}';
$zeroNumber= '{
  "test" : 06
}';
var_dump(json_decode($noZeroNumber));//object(stdClass)[1]
  public 'test' => int 6
var_dump(json_decode($zeroNumber));//null


或许对于这种问题很少出现,但是一旦出现了,我们就很难去查找问题的原因。

四、decodechokesonunquotedobjectkeys

key值没有使用引号时,会无法解析,例如代码5-1

echo "<br/>***********decode chokes on unquoted object keys*************<br/>";
var_dump(json_decode('{"a":"tan","model":"sedan"}'));//object(stdClass)[1]
  public 'a' => string 'tan' (length=3)
  public 'model' => string 'sedan' (length=5)
var_dump(json_decode('{a:"tan","model":"sedan"}'));//null


分享到:
评论

相关推荐

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

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

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

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

    PHP json_decode函数详细解析

    2、第一个参数是json格式的字符串,第二个参数是boolean值(false转化成对象,true转化成数组,默认false),如果转化失败返回null。 二、遇到的问题在项目中调用了java写的一个web服务,返回的数据是”{‘stauts’:’...

    JSON PHP中,Json字符串反序列化成对象/数组的方法

    //json_decode(json字符串); $city = array('shandong'=&gt;'jinan','henan'=&gt;'zhengzhou','hebei'=&gt;'shijiazhuang'); $jn_city = json_encode($city); //反编码json $fan_city = json_decode($jn_city,false);//第二个...

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

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

    PHP处理JSON字符串key缺少双引号的解决方法

    本文实例讲述了PHP处理JSON字符串key缺少引号的解决方法,分享给大家供大家参考之用。具体方法如下: 通常来说,JSON字符串是key:value形式的字符串,正常key是由双引号括起来的。 例如: &lt;?php $data = array...

    PHP针对JSON操作实例分析

    在PHP中可以使用 json_decode() 由一串规范的字符串解析出 JSON对象,使用 json_encode() 由JSON 对象生成一串规范的字符串。 例: 复制代码 代码如下:&lt;?php $json = ‘{“a”:1, “b”:2, “c”:3, “d”:4, “e...

    JSON字符串传到后台PHP处理问题的解决方法

    ’gsd2′,’c’:’dww3′},…..] , 这样的话多条记录后台解析也很方便,但我这么传的时候后台收到的是 [{\’a\’:2321,\’b\’:\’gsd\’,\’c\’:\’dww\’}…] 这样的格式,而我需要的标准的JSON格式的字符串,...

    keyvalues-php:适用于PHP的简单Valve KeyValues格式解析器转换器

    kv_decode(string $string, int $flags = 0) :(array)获取有效的KeyValue字符串并将其转换为PHP关联数组 kv_encode(array $arr, int $tabs = 0) :(string)将关联数组转换为有效的Valve KeyValue字符串 笔记 ...

    php-metar-decoder:METAR气象观测解码器

    一个用于解码METAR字符串PHP库,已完全进行了单元测试(100%代码覆盖率) 您可以在上尝试。 他们在生产中使用php-metar-decoder: (公开) (私人) 您在这里的服务? 提交拉取请求或打开问题! 介绍 该软件...

Global site tag (gtag.js) - Google Analytics