php json对象不规则,PHP 解析非标准json

PHP 解析非标准json

2017-1-22 Frank PHP

数据来自redis,通过python的dict存入的。用json_decode()解析为空。

>>> a = "汉字"

>>> b = a.decode("gbk")

>>> c = {"a":b}

>>> print {"a":a}

{'a': '\xba\xba\xd7\xd3'}

>>> print {"a":a.decode("gbk")}

{'a': u'\u6c49\u5b50'}

$msg = "{'a': '\xba\xba\xd7\xd3'}" ;

$msg = json_decode($msg,true) ;

#解析数据为空,那些\x的字符是gbk的

解决思路:

1.python那边将数据转成unicode。

2.php这边将gbk编码转成utf-8<?php

/*

字符串GBK转码为UTF-8,数字转换为数字。

*/

function ct2($s){

if(is_numeric($s)) {

return intval($s);

} else {

return iconv("GBK","UTF-8",$s);

}

}

/*

批量处理gbk->utf-8

*/

function icon_to_utf8($s) {

if(is_array($s)) {

foreach($s as $key => $val) {

$s[$key] = icon_to_utf8($val);

}

} else {

$s = ct2($s);

}

return $s;

}

$msg = "{'a': '\xba\xba\xd7\xd3'}" ;

echo $msg ."\n";

$msg = ct2($msg) ;

$msg = str_replace("'", '"', $msg) ;

echo $msg ."\n";

var_dump(json_decode($msg,true)) ;

数据来自redis,通过python的dict存入的。用json_decode()解析为空。

```python

>>> a = "汉字"

>>> b = a.decode("gbk")

>>> c = {"a":b}

>>> print {"a":a}

{'a': '\xba\xba\xd7\xd3'}

>>> print {"a":a.decode("gbk")}

{'a': u'\u6c49\u5b50'}

```

```php

$msg = "{'a': '\xba\xba\xd7\xd3'}" ;

$msg = json_decode($msg,true) ;

#解析数据为空,那些\x的字符是gbk的

```

解决思路:

1.python那边将数据转成unicode。

2.php这边将gbk编码转成utf-8

```php

utf-8

*/

function icon_to_utf8($s) {

if(is_array($s)) {

foreach($s as $key => $val) {

$s[$key] = icon_to_utf8($val);

}

} else {

$s = ct2($s);

}

return $s;

}

$msg = "{'a': '\xba\xba\xd7\xd3'}" ;

echo $msg ."\n";

$msg = ct2($msg) ;

$msg = str_replace("'", '"', $msg) ;

echo $msg ."\n";

var_dump(json_decode($msg,true)) ;

```

>参考:

http://www.111cn.net/phper/php-cy/55575.htm

发表评论 登录:

昵称

2c6b9431e93c918dea94c1d18a9f2ef2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值