【问题标题】:How to parse JSON and access results如何解析 JSON 并访问结果
【发布时间】:2013-06-05 16:09:48
【问题描述】:

我正在使用 CURL 发送请求。响应数据类型为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)/"
}

【问题讨论】:

  • 试试json_decode
  • 我会建议您从原始帖子中删除您的许可证密钥?人们也许可以使用它从您正在使用的服务发送短信。
  • 旋转按键。无论如何,在编辑后的序列中,许可证密钥是可见的。

标签: php json curl


【解决方案1】:

如果您的$result 变量是类似json 的字符串,则必须使用json_decode 函数将其解析为objectarray

$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

参考资料:

【讨论】:

    【解决方案2】:

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

    curl_exec() reference 解释:

    返回值

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

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

    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    

    之后,您可以在$result 上致电json_decode(),正如其他答案所指出的那样。

    总的来说 - PHP 的 curl 库很有用,并且有很多功能可以处理 HTTP 协议(​​和其他协议)的细节,但如果你想要的只是 GET 一些资源甚至 POST访问某个 URL,然后阅读响应 - 然后file_get_contents() 就是您所需要的:它使用起来更简单,而且不用担心令人惊讶的行为。

    【讨论】:

      【解决方案3】:

      试试:

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

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

      至于数据库,它只是使用这样的查询:

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

      准备好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-21
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多