如何从CURL解析json响应

时间:2013-06-10 03:26:10

标签: php json curl

我正在使用CURL发送请求。响应dataType为json。如何解析这些数据并将其插入数据库?

<?php

$url = 'http://sms2.cdyne.com/sms.svc/SimpleSMSsendWithPostback?        PhoneNumber=18887477474&Message=test&LicenseKey=LICENSEKEY';

$cURL = curl_init();

curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);

curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json'
));

$result = curl_exec($cURL);

curl_close($cURL);



print_r($result);

?>

JSON输出:

{
    "Cancelled": false,
    "MessageID": "402f481b-c420-481f-b129-7b2d8ce7cf0a",
    "Queued": false,
    "SMSError": 2,
    "SMSIncomingMessages": null,
    "Sent": false,
    "SentDateTime": "/Date(-62135578800000-0500)/"
}

3 个答案:

答案 0 :(得分:73)

如果您的$result变量是字符串json,则必须使用json_decode函数将其解析为对象数组:< / p>

$result = '{"Cancelled":false,"MessageID":"402f481b-c420-481f-b129-7b2d8ce7cf0a","Queued":false,"SMSError":2,"SMSIncomingMessages":null,"Sent":false,"SentDateTime":"\/Date(-62135578800000-0500)\/"}';
$json = json_decode($result, true);
print_r($json);

输出

Array
(
    [Cancelled] => 
    [MessageID] => 402f481b-c420-481f-b129-7b2d8ce7cf0a
    [Queued] => 
    [SMSError] => 2
    [SMSIncomingMessages] => 
    [Sent] => 
    [SentDateTime] => /Date(-62135578800000-0500)/
)

现在,您可以将$json变量用作数组:

echo $json['MessageID'];
echo $json['SMSError'];
// other stuff

参考文献:

答案 1 :(得分:4)

尝试:

$result = curl_exec($cURL);
$result = json_decode($result,true);

现在,您可以从MessageID访问$result['MessageID']

对于数据库,它只是使用如下查询:

INSERT INTO `tableName`(`Cancelled`,`Queued`,`SMSError`,`SMSIncommingMessage`,`Sent`,`SentDateTime`) VALUES('?','?','?','?','?');

制备

答案 2 :(得分:0)

示例代码的主要问题在于,用于存储$result的输出的curl_exec()变量不包含HTTP响应的主体-它包含值true 。如果您尝试print_r(),它只会说“ 1”。

curl_exec() reference解释:

  

返回值

     

成功返回 TRUE ,失败返回 FALSE 。但是,如果设置了 CURLOPT_RETURNTRANSFER 选项,则成功时将返回结果,失败时将返回 FALSE

因此,如果要在$result变量中获取HTTP响应正文,则必须先运行

curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);

之后,您可以致电json_recode()上的$result,如其他答案所指出的。

总的来说,PHP的curl库非常有用,并且具有许多处理HTTP协议(及其他)细节的功能,但是如果您想要的只是GET一些资源,甚至是{ {1}}到某个URL,然后阅读响应-然后file_get_contents()就成为了您所需要的:使用起来更简单,并且不用担心令人惊讶的行为。