如何解析 JSON 并访问结果
Posted
技术标签:
【中文标题】如何解析 JSON 并访问结果【英文标题】:How to parse JSON and access results 【发布时间】: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
我会建议您从原始帖子中删除您的许可证密钥?人们也许可以使用它从您正在使用的服务发送短信。
旋转按键。无论如何,在编辑后的序列中,许可证密钥是可见的。
【参考方案1】:
如果您的$result
变量是类似json 的字符串,则必须使用json_decode
函数将其解析为object 或array:
$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
参考资料:
json_decode - PHP 手册【讨论】:
【参考方案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('?','?','?','?','?');
准备好了。
【讨论】:
以上是关于如何解析 JSON 并访问结果的主要内容,如果未能解决你的问题,请参考以下文章
Python - 如何解析 JSON 并将其保存到 MYSQL 数据库