日期:2014-05-17  浏览次数:20580 次

问一下这个JS数据如何解码,
问一下这个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是不行的哦

------解决方案--------------------
这是jsonp,给你javascript调用的 ,用jquery的jsonp方式请求,自己百度吧,或者自己写一个
原理就是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参数去掉

------解决方案--------------------
$url = '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';
$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
        (
            [marketInfo] => Array
                (
                    [displayName] => 所有市场
                    [marketHref] => http://list.taobao.com/cat-0.htm
                )

            [catPathList] => Array
                (
                )