【问题标题】:Get a variable value from a json decoded response从 json 解码响应中获取变量值
【发布时间】:2014-02-09 21:36:34
【问题描述】:

我有一个 json 响应,它被解码为数组 $data as

stdClass Object ( [outboundSMSMessageRequest] => stdClass Object ( [deliveryInfoList] => stdClass Object ( [deliveryInfo] => stdClass Object ( [address] => 8606142527 [deliveryStatus] => Submitted ) [resourceURL] => http://api-testmobile.com/smsmessaging/1/outbound/OPNHSE/requests/urn:uuid:0f55fd13-a419-4ad9-adec-3dcf63ca39c1/deliveryInfos ) [senderAddress] => OPNHSE [outboundSMSTextMessage] => stdClass Object ( [message] => Sam has requested a payment of Rs 10.00. ) [clientCorrelator] => [receiptRequest] => stdClass Object ( [notifyURL] => [callbackData] => ) [senderName] => [resourceURL] => http://api-openhouse.testingmobile.com/smsmessaging/1/outbound/OPNHSE/requests/urn:uuid:0f5-a419-4ad9-adec-3dcf63ca39c1 ) )

我想将[deliveryStatus] => Submitted这个“提交”存储到一个变量中。

我试过$dStatus=$data['deliveryStatus'];,但它不起作用:(

更新

我尝试通过 json_decode($data,TRUE); 将其转换为关联数组

Array ( [outboundSMSMessageRequest] => Array ( [deliveryInfoList] => Array ( [deliveryInfo] => Array ( [address] => 98989 [deliveryStatus] => Submitted ) [resourceURL] => http://api-otest.com/smsmessaging/1/outbound/OPNHSE/requests/urn:uuid:3b277b5b-cf79-4551-872f-16674499bc09/deliveryInfos ) [senderAddress] => OPNHSE [outboundSMSTextMessage] => Array ( [message] => sam has requested a payment of Rs 100.00 through payt.me . Kindly clickhttps://www.test.me/test to pay. ) [clientCorrelator] => [receiptRequest] => Array ( [notifyURL] => [callbackData] => ) [senderName] => [resourceURL] => http://api-test.com/smsmessaging/1/outbound/OPNHSE/requests/urn:uuid:3b277b5b-cf79-4551-872f-16674499bc09 ) )

我知道了。现在如何获取 deliveryStatus 变量?

【问题讨论】:

    标签: php html json response


    【解决方案1】:

    如果你想访问一个关联数组,你应该先将它转换成一个关联数组。将TRUE 作为第二个参数传递给json_decode 函数,如文档中所述:http://php.net/json_decode

    【讨论】:

      【解决方案2】:

      这是因为您以错误的方式访问数据。 json_decode 返回一个对象,因此您需要将这些字段作为对象属性进行访问。例如:

      代替

      $dStatus=$data['deliveryStatus'];
      

      尝试会员访问格式

      $dStatus=$data->deliveryStatus;
      

      如果你想以关联数组的形式访问数据,那也很简单。

      当你调用json_decode时,传递true作为第二个参数:

      $myJson = json_decode($data,true);
      

      更多信息请参考document on json_decode

      【讨论】:

      • 我尝试了成员访问格式,但错误说这是一个未定义的变量。
      • 确保成员“路径”正确。我没有机会详细查看您退回的物品(试图同时看我 2 岁的女儿:P)
      • :D 谢谢。我会检查的
      • 但我收到此消息:尝试获取非对象的属性 '$dStatus=$status->outboundSMSMessageRequest->deliveryInfoList->deliveryInfo->deliveryStatus;回声 $dStatus;'
      • 确保它不是嵌入其中的对象数组,在这种情况下,您需要使用数组表示法。
      【解决方案3】:

      我建议查看你正在输出的 HTML 的视图源,或者将 print_r 包装在一个 <pre></pre> 标记中,这样你可以更容易地看到结构。

      此外,元素属于 Object 类,这意味着它们不是数组,因此您需要使用 -> 来访问对象的元素。

      所以如果它是一个对象:

      $data = json_decode($response);
      $dStatus = $data->outboundSMSMessageRequest->deliveryInfoList->deliveryInfo->deliveryStatus;
      

      如果是数组,那么:

      $data = json_decode($response, true);
      $dStatus = $data['outboundSMSMessageRequest']['deliveryInfoList']['deliveryInfo']['deliveryStatus'];
      

      你看,deliveryStatus 条目在第一种情况下嵌套在子对象中,在第二种情况下嵌套在子数组中。

      【讨论】:

      • 我试过了,但遇到了 PHP 错误 严重性:通知消息:尝试获取非对象文件名的属性:controllers/dash.php 行号:138
      • 您需要知道如何调试您的代码...首先,查看第 138 行,并使用 print_r 检查您尝试访问的对象。
      • 你能告诉我如何从关联数组中获取该变量吗?我已经更新了问题
      • 数组格式也是一样,只是用[]代替->,所以:$data['outboundSMSMessageRequest']['deliveryInfoList']['deliveryInfo']['deliveryStatus']
      • 我实际上没有得到它,你能更新你的答案吗?我是 json 新手。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多