php json decode hash,【已解决】PHP中的json的json_decode不工作没有任何输出

【背景】

折腾:

期间,json_decode好像出了问题,不工作,导致后续内容无输出,感觉像是缺少了json的库,感觉需要去安装json的PECL库。

【折腾过程】

1.注意到了官网:

中的PHP的版本要求:(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)

自己此处是PHP 5.4,符合要求的。

不对,好像“PECL json >= 1.2.0”表示需要额外安装这个JSON库PECL的???

2.不过还是先去搜:

php json not working

参考:

先去加上true参数试试:echo "before json_decode tue";

$decodedJsonArr = json_decode($respJson, true);

echo "decodedJsonArr=".$decodedJsonArr;

var_dump($decodedJsonArr);

echo "var_dump decodedJsonArr done";

// var_dump(isset("access_token", $decodedJsonArr));

var_dump(isset('access_token', $decodedJsonArr));

// var_dump(array_key_exists("access_token", $decodedJsonArr));

var_dump(array_key_exists('access_token', $decodedJsonArr));

结果:

还是没有任何输出。

3.由于要处理的内容不包含斜杠和反斜杠,所以也无需那个所谓的stripslashes

不包含html的entity,所以也不需要html_entity_decode

搜:

php json json_decode no output

参考:

去试试:

的:

结果:

“(PHP 5 >= 5.5.0, PHP 7)”

此处PHP是5.4,不符合要求。

“(PHP 5 >= 5.3.0, PHP 7)”

此处PHP5.4,符号这个要求。

去试试:echo "before decodedJsonObj";

$decodedJsonObj = json_decode($respJson);

switch (json_last_error()) {

case JSON_ERROR_NONE:

echo ' - No errors';

break;

case JSON_ERROR_DEPTH:

echo ' - Maximum stack depth exceeded';

break;

case JSON_ERROR_STATE_MISMATCH:

echo ' - Underflow or the modes mismatch';

break;

case JSON_ERROR_CTRL_CHAR:

echo ' - Unexpected control character found';

break;

case JSON_ERROR_SYNTAX:

echo ' - Syntax error, malformed JSON';

break;

case JSON_ERROR_UTF8:

echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';

break;

default:

echo ' - Unknown error';

break;

}

echo "decodedJsonObj=".$decodedJsonObj;

结果是:

还是没有任何输出。

4.突然想到,不会是:

对于此处要解码的变量:

$respJson

以为是字符串,结果实际上是:

curl_exec

返回的结果,估计不是字符串,所以去看看:Return Values

Returns TRUE on success or FALSE on failure. However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure.

所以不确定返回类型。

所以去:

5.确定当前变量$respJson的确是string类型。

那就是json_decode的问题了。

怀疑就是少了PHP的JSON库了。

搜:

php json_decode PECL json

参考:

结果说了,PHP 5.2.0,JSON库是集成到PHP里面了。

不过评论里面说了Ubuntu中说是必须去安装:php5-json

所以猜测此处我的CentOS 7中也是需要去安装的。

6.先去看看:root@chantyou:access_token# php -m

PHP Deprecated: Comments starting with '#' are deprecated in /etc/php.ini on line 461 in Unknown on line 0

[PHP Modules]

bz2

calendar

Core

ctype

curl

date

dom

ereg

exif

fileinfo

filter

ftp

gd

gettext

gmp

hash

iconv

json

libxml

mcrypt

mhash

mysql

mysqli

openssl

pcntl

pcre

PDO

pdo_mysql

pdo_sqlite

Phar

readline

Reflection

session

shmop

SimpleXML

sockets

SPL

sqlite3

standard

tokenizer

wddx

xml

xmlreader

xmlwriter

xsl

zip

zlib

[Zend Modules]

root@chantyou:access_token#

此处看到已经安装了json模块了。

7.再去看看phpinfo()中是否有json:

然后确认也是有的:

96fd57f40ab5c58cdcb77ec3173d7d5f.png

8.根据评论,还是去看看配置文件中,是否有关闭了json。

结果/etc/php.ini中更本没有json的配置选项。

9.再去试试:echo "before decodedJsonArr";

// $decodedJsonObj = json_decode($respJson);

$decodedJsonArr = json_decode($respJson, true);

echo "after decodedJsonArr";

switch (json_last_error()) {

case JSON_ERROR_NONE:

echo ' - No errors';

break;

case JSON_ERROR_DEPTH:

echo ' - Maximum stack depth exceeded';

break;

case JSON_ERROR_STATE_MISMATCH:

echo ' - Underflow or the modes mismatch';

break;

case JSON_ERROR_CTRL_CHAR:

echo ' - Unexpected control character found';

break;

case JSON_ERROR_SYNTAX:

echo ' - Syntax error, malformed JSON';

break;

case JSON_ERROR_UTF8:

echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';

break;

default:

echo ' - Unknown error';

break;

}

结果:string1before decodedJsonArrafter decodedJsonArr - No errors

10.再去不加上true再试试:echo "before decodedJsonArr";

$decodedJsonObj = json_decode($respJson);

// $decodedJsonArr = json_decode($respJson, true);

echo "after decodedJsonArr";

switch (json_last_error()) {

case JSON_ERROR_NONE:

echo ' - No errors';

break;

case JSON_ERROR_DEPTH:

echo ' - Maximum stack depth exceeded';

break;

case JSON_ERROR_STATE_MISMATCH:

echo ' - Underflow or the modes mismatch';

break;

case JSON_ERROR_CTRL_CHAR:

echo ' - Unexpected control character found';

break;

case JSON_ERROR_SYNTAX:

echo ' - Syntax error, malformed JSON';

break;

case JSON_ERROR_UTF8:

echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';

break;

default:

echo ' - Unknown error';

break;

}

结果:string1before decodedJsonArrafter decodedJsonArr - No errors

这下真是奇了怪了:

现在去测试,不论是:

$decodedJsonObj = json_decode($respJson);

还是:

$decodedJsonArr = json_decode($respJson, true);

都没问题了。

但是之前测试同样的代码,却没有任何输出。。。

这是诡异了。。。。

11.不管了,继续测试。echo "before decodedJsonArr";

$decodedJsonObj = json_decode($respJson);

// $decodedJsonArr = json_decode($respJson, true);

echo "after decodedJsonArr";

switch (json_last_error()) {

case JSON_ERROR_NONE:

echo ' - No errors';

break;

case JSON_ERROR_DEPTH:

echo ' - Maximum stack depth exceeded';

break;

case JSON_ERROR_STATE_MISMATCH:

echo ' - Underflow or the modes mismatch';

break;

case JSON_ERROR_CTRL_CHAR:

echo ' - Unexpected control character found';

break;

case JSON_ERROR_SYNTAX:

echo ' - Syntax error, malformed JSON';

break;

case JSON_ERROR_UTF8:

echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';

break;

default:

echo ' - Unknown error';

break;

}

echo "decodedJsonObj=".$decodedJsonObj;

var_dump($decodedJsonObj);

结果是:

后续的echo和var_dump就没有任何输出了。。。

12.改为:// echo "decodedJsonObj=".$decodedJsonObj;

echo $decodedJsonObj;

试试:

效果同上。

13.难道是echo变量有问题?

搜:

php echo object no output

无结果。

搜:

php echo object

参考:

再去试试:// echo "decodedJsonObj=".$decodedJsonObj;

// echo $decodedJsonObj;

var_dump($decodedJsonObj);

终于可以输出了:string1before decodedJsonArrafter decodedJsonArr - No errorsobject(stdClass)#2 (2) {

["access_token"]=>

string(107) "cUuuS0AY-DiYJ20N0wYuyytZPEOpH21GOkBKDGZEQAfV_sYJSVTT_OLZyiwwkL_i5zEUtKQgQN3bCM8OujuOTb0XWfiJ0rCcBOJ3Nz4nUsw"

["expires_in"]=>

int(7200)

}

好像证明:

echo 不能直接输出object对象???

【总结】

此处json的json_decode工作不正常:

1.最开始是由于其他的后面的错误代码而导致前面的代码(含json_decode)工作不正常,无法输出显示。

2.后来是改为正确的代码的时候,结果也是不工作。后来不知道为何就又正常工作了。很是诡异。

正常的时候:

(1)PHP内置了json模块,此处无需额外安装json模块

(2)通过php -m或phpinfo()都可以确认此处是包含json模块的。

3.此处用echo打印一个对象:echo $decodedJsonObj;

结果会导致程序代码异常->后续其他正常代码也不会继续执行了。

前面的正常代码也没有任何输出了。。。

不清楚具体为何。。。

4.正常的json_decode用法:$decodedJsonObj = json_decode($respJson);

var_dump($decodedJsonObj);

$decodedJsonArr = json_decode($respJson, true);

var_dump($decodedJsonArr);

是可以正常工作的。

此处的输出是:object(stdClass)#2 (2) {

["access_token"]=>

string(107) "c3NjgviUMlscg1AiFZ0DDYu_8muqJHXE4E-Ez9nKqpfql6j25_UceYR7uGY7egCxKAEvMWY179aWElU19DaPQ3ojyQkXKQX4idC0PeJ1liE"

["expires_in"]=>

int(7200)

}

array(2) {

["access_token"]=>

string(107) "c3NjgviUMlscg1AiFZ0DDYu_8muqJHXE4E-Ez9nKqpfql6j25_UceYR7uGY7egCxKAEvMWY179aWElU19DaPQ3ojyQkXKQX4idC0PeJ1liE"

["expires_in"]=>

int(7200)

}

可以注意到,json_decode输出的结果,不加true是object,加了ture是array。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值