如何解析 JSON 和访问结果返回值

2022-08-30 09:39:57

我正在使用 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)/"
}

答案 1

如果你的变量是一个字符串json,你必须使用函数将其解析为对象数组$resultjson_decode

$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

示例代码的主要问题是,用于存储 输出的变量不包含 HTTP 响应的主体 - 它包含值 。如果你尝试这样做,它只会说“1”。$resultcurl_exec()trueprint_r()

curl_exec() 引用解释:

返回值

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

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

curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);

之后,您可以按照其他答案的说明调用 。json_decode()$result

一般来说 - PHP的curl库很有用,并且有很多功能来处理HTTP协议(和其他)的细节,但是如果你想要的只是一些资源甚至一些URL,并阅读响应 - 那么file_get_contents()就是你所需要的:它使用起来要简单得多,并且担心的行为要少得多。GETPOST


推荐