我有一些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的正确方法是什么?
我使用一些string.explode语句将其破解为工作但我更喜欢这样做。
谢谢!
答案 0 :(得分:2)
在这种情况下,使用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索引的。
答案 1 :(得分:1)
解码为stdObject
$jsondata = json_decode($json, false);
echo $jsondata->Return->Results->SessionID;
应该产生你想要的东西。