2015-06-01 4 views
0

У меня есть этот бит PHP, который получает строку JSON:Синтаксический JSON элементы в PHP

$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. Это единственный бит, в котором я нуждаюсь. Я следил за несколькими другими статьями здесь, но ничего не получаю и не ошибся.

Несколько вещей, которые я пробовал:

$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 string.explode, но я бы предпочел сделать это правильно.

Спасибо!

ответ

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.

+0

BINGO! Так оно и было. Спасибо. – Lance

+0

Я буду. Я должен ждать 4 минуты. – Lance

1

расшифровывает, как stdObject

$jsondata = json_decode($json, false); 
echo $jsondata->Return->Results->SessionID; 

должны дать то, что вы ищете.

+2

Это тоже работает. Спасибо. – Lance

Смежные вопросы