【问题标题】:Parsing JSON elements in PHP在 PHP 中解析 JSON 元素
【发布时间】:2015-06-01 15:11:42
【问题描述】:

我有一段 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 语句破解了它,但我更愿意正确地做到这一点。

谢谢!

【问题讨论】:

    标签: php json parsing


    【解决方案1】:

    在这种情况下,使用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。

    【讨论】:

    • 宾果游戏!做到了。谢谢。
    • 我会的。我得等 4 分钟。
    【解决方案2】:

    解码为标准对象

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

    应该产生你正在寻找的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2017-07-14
      相关资源
      最近更新 更多