我有这一点php检索JSON字符串:
$login = "http://$server/auth/login/$username/$password";
$json = file_get_contents($login);
收到的JSON是:
{
"Return":{
"Type":"auth.login",
"ResponseSummary":{
"StatusCode":0,
"ErrorMessage":""
},
"Results":{
"SessionID":"fejqciel23dcjqvsumjdplq6s6",
"User":{
"Id":"*****",
"AccountId":"*****",
"FirstName":"*****",
"LastName":"******",
"Email":"*****@*****.***",
"UserName":"*****@*****.***",
"Group":"3",
"Language":"English",
"Measurement":"Imperial",
"Timezone":"Etc'/GMT+8",
"MsgFlag":"0",
"Pincode":"",
"Phone":"",
"TerminationDate":null,
"DaylightSavings":"0",
"AcceptedWebsiteHardwareTc":"0",
"APIContractAccepted":null,
"DisplayNotice":"1",
"NoticeInterval":"1 day",
"TemporaryPassword":false,
"Roles":[3, 11],
"UserCode":******,
"AccountName":"*****@*****.***",
"CustomAttributes":[]
},
"AccountLastChangeDate":"2015-05-27 06:13:28"
}
}
}
我试图解析出SessionID。这是我唯一需要的东西。我已经阅读了其他几篇关于SO的文章,但要么一无所获,要么出现错误。
我试过的几件事:
$jsondata = json_decode($json, true);
echo $jsondata['Return'][0]['Results'][0]['User'][0]['SessionID'];
和
$jsondata = json_decode($json);
echo $jsondata->Return[0]->Results[0]->User[0]->SessionID;
和它们的许多变体。我要么什么也得不到,要么就是各种各样的错误。
提取SessionID的正确方法是什么?
我已经黑了它的工作使用一对字符串。但是我更喜欢正确地使用它。
谢谢!
在这种情况下,使用php --interactive
可以帮助您查看正在处理的变量:
php > $jsonArr = json_decode($json, true);
php > var_dump($jsonArr);
array(1) {
["Return"]=>
array(3) {
["Type"]=>
string(10) "auth.login"
["ResponseSummary"]=>
array(2) {
["StatusCode"]=>
int(0)
["ErrorMessage"]=>
string(0) ""
}
["Results"]=>
array(3) {
["SessionID"]=>
string(26) "fejqciel23dcjqvsumjdplq6s6"
["User"]=>
array(24) {
["Id"]=>
string(5) "*****"
["AccountId"]=>
string(5) "*****"
["FirstName"]=>
string(5) "*****"
["LastName"]=>
string(6) "******"
["Email"]=>
string(15) "*****@*****.***"
["UserName"]=>
string(15) "*****@*****.***"
["Group"]=>
string(1) "3"
["Language"]=>
string(7) "English"
["Measurement"]=>
string(8) "Imperial"
["Timezone"]=>
string(9) "Etc/GMT+8"
["MsgFlag"]=>
string(1) "0"
["Pincode"]=>
string(0) ""
["Phone"]=>
string(0) ""
["TerminationDate"]=>
NULL
["DaylightSavings"]=>
string(1) "0"
["AcceptedWebsiteHardwareTc"]=>
string(1) "0"
["APIContractAccepted"]=>
NULL
["DisplayNotice"]=>
string(1) "1"
["NoticeInterval"]=>
string(5) "1 day"
["TemporaryPassword"]=>
bool(false)
["Roles"]=>
array(2) {
[0]=>
int(3)
[1]=>
int(11)
}
["UserCode"]=>
string(9) "something"
["AccountName"]=>
string(4) "else"
["CustomAttributes"]=>
array(0) {
}
}
["AccountLastChangeDate"]=>
string(19) "2015-05-27 06:13:28"
}
}
}
如你所见,$jsonArr['Return']['Results']['SessionID']
将得到你所需要的。您错误地认为JSON数组的元素索引为0。
decode as stdObject
$jsondata = json_decode($json, false);
echo $jsondata->Return->Results->SessionID;