如何解析 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 函数将其解析为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

参考资料:

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 并访问结果的主要内容,如果未能解决你的问题,请参考以下文章

快速解析双 JSON 编码数组并访问它

Python - 如何解析 JSON 并将其保存到 MYSQL 数据库

如何解析具有动态键名的嵌套 json

如何在 ios 中解析这种类型的 JSON 响应? [复制]

Ruby - 如何在解析的json中访问键值

如何解析 JSON 对象并在表格中显示? [关闭]