关于json_decode在php中的一些无法解析的字符串,包括以下几种常见类型。
一、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
当json的value值为number类型,而且该number以0开头,例如代码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解决办法,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,这样处理才能正确解析json数据
下面小编就为大家带来一篇Json_decode 解析json字符串为NULL的解决方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2、第一个参数是json格式的字符串,第二个参数是boolean值(false转化成对象,true转化成数组,默认false),如果转化失败返回null。 二、遇到的问题在项目中调用了java写的一个web服务,返回的数据是”{‘stauts’:’...
//json_decode(json字符串); $city = array('shandong'=>'jinan','henan'=>'zhengzhou','hebei'=>'shijiazhuang'); $jn_city = json_encode($city); //反编码json $fan_city = json_decode($jn_city,false);//第二个...
今天同事项目中遇到一个问题,通过http接口获取的json字符串使用json_decode始终无法正确解析,返回空白。 直接把结果字符串复制出来手动创建一个变量却正常,在前端js也能解析,搞了半天不得其解,借助强大的谷歌...
本文实例讲述了PHP处理JSON字符串key缺少引号的解决方法,分享给大家供大家参考之用。具体方法如下: 通常来说,JSON字符串是key:value形式的字符串,正常key是由双引号括起来的。 例如: <?php $data = array...
在PHP中可以使用 json_decode() 由一串规范的字符串解析出 JSON对象,使用 json_encode() 由JSON 对象生成一串规范的字符串。 例: 复制代码 代码如下:<?php $json = ‘{“a”:1, “b”:2, “c”:3, “d”:4, “e...
’gsd2′,’c’:’dww3′},…..] , 这样的话多条记录后台解析也很方便,但我这么传的时候后台收到的是 [{\’a\’:2321,\’b\’:\’gsd\’,\’c\’:\’dww\’}…] 这样的格式,而我需要的标准的JSON格式的字符串,...
kv_decode(string $string, int $flags = 0) :(array)获取有效的KeyValue字符串并将其转换为PHP关联数组 kv_encode(array $arr, int $tabs = 0) :(string)将关联数组转换为有效的Valve KeyValue字符串 笔记 ...
一个用于解码METAR字符串PHP库,已完全进行了单元测试(100%代码覆盖率) 您可以在上尝试。 他们在生产中使用php-metar-decoder: (公开) (私人) 您在这里的服务? 提交拉取请求或打开问题! 介绍 该软件...