问一下这个JS数据如何解码,数据地址:http://list.taobao.com/itemlist/default.htm?_input_charset=utf-8&json=on&cat=0&style=grid&pcat=food2011&q=ps&rr=1&spm=a2106.m5221.1000187.1&commend=all&pSize=95&_ksTS=1382516137021_144&callback=jsonp145
先声明,用php的json_decode是不行的哦
先声明,用php的json_decode是不行的哦
编码会导致不行的。我以前遇到这种的做法是用JS提交给PHP。
$str ='{ "status": { "code": "200" , "url": "" }, 弄成类似于这样,把括号还有前面那几个字母去掉$str ='json数据';
$web=json_decode($str);
$arr=json_to_array($web);
print_r($arr);function json_to_array($web){
$arr=array();
foreach($web as $k=>$w){
if(is_object($w)) $arr[$k]=json_to_array($w); //判断类型是不是object
else $arr[$k]=$w;
}
return $arr;
}
原理就是url里面callback参数是你预先要定义的函数名
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<script type='text/javascript'>
function jsonp145(data){
alert(data.status.code);//200
}
</script>
<script src='http://list.taobao.com/itemlist/default.htm?_input_charset=utf-8&json=on&cat=0&style=grid&pcat=food2011&q=ps&rr=1&spm=a2106.m5221.1000187.1&commend=all&pSize=95&_ksTS=1382516137021_144&callback=jsonp145'></script>
</body>
</html>你如果要php请求这个链接,就把callback参数去掉
$s = file_get_contents($url);
preg_match('/{.+}/s', $s, $r); //他返回的是js函数,所以需要脱括号
$o = json_decode(iconv('gbk', 'utf-8', $r[0]), true);//他的数据是gbk的,但json_decode只能处理utf-8的函数
print_r($o);
Array
(
[status] => Array
(
[code] => 200
[url] =>
) [crumb] => Array
(
[etInfo] => Array
(
[displayName] => 所有市场
[etHref] => http://list.taobao.com/cat-0.htm
) [catPathList] => Array
(
) ) [keyword] => Array
(
[key] => q
[value] => ps
) [sort2List] =>
[promotion] => Array
.....