PHP:处理'JSONP'输出与'JSON'及其解析?

Abh*_*ani 6 php jsonp decode callback

我在使用php的json_decode函数解析'jsonp'请求时遇到问题.

我的问题是

一个.'jsonp'中回调函数的用途是什么,我应该将其解除,或者我想以某种方式使用它.?

如何纠正以"jsonp"格式收到的语法错误?

下面我给出了代码和我得到的响应.

1.我要求使用PHP卷曲的示例网址

$url = 'https://ssl.domain.com/data/4564/d.jsonp';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);                
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);        
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");     
$feed = curl_exec($ch);
curl_close($ch);

echo $feed =  gzdecode($feed); // Success its displays the jsonp feed
Run Code Online (Sandbox Code Playgroud)

2.然后我尝试json_decode接收到的输出,它抛出错误no 4意思是JSON_SYNTAX_ERROR,我猜的原因是因为没有引用jsonp中字符串类型的名称.例如Categories,Name,Position等.

$json_feed = json_decode($feed);
$error = json_last_error(); 
echo $error;     // Throws error no. 4
Run Code Online (Sandbox Code Playgroud)

3.来自网址的RAW'jsonp'输出.

domain_jsonp_callback({
   Categories:[
      {
         Name:"Artifacts",
         Position:14,
         Count:70,
         ImageUrls:{
            i100:"//s3-eu-west-1.amazonaws.com/s.domain.com/1.png",
            i120:"//s3-eu-west-1.amazonaws.com/s.domain.com/2.png",
            i140:"//s3-eu-west-1.amazonaws.com/s.domain.com/3.png",
            i180:"//s3-eu-west-1.amazonaws.com/s.domain.com/4.png",
            i220:"//s3-eu-west-1.amazonaws.com/s.domain.com/5.png",
            i280:"//s3-eu-west-1.amazonaws.com/s.domain.com/6.png"
         }
      }
   ]
});
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 2

“jsonp”中的回调函数有什么用,我应该将其关闭,还是我应该以某种方式使用它。?

JSON-P 实际上是一个 JavaScript 脚本,由带有参数的函数调用组成。

如果你想在 PHP 中解析它,那么是的,你需要将其剥离。);你还需要把最后的部分去掉。

b. 如何纠正以“jsonp”格式收到的语法错误?

您需要修复数据,使其确实是 JSON。您拥有的数据是 JavaScript 文本,但它不符合与 JSON 匹配的 JavaScript 子集(例如,属性名称不是字符串,但必须是字符串)。

最好从源中获取真正的 JSON 资源。