json decode get attribute


json decode get attribute

我似乎在网上找不到答案,但我想这是因为我不太确定该搜索什么,因为我对xml和json非常陌生。

如果我有这个xml

$postData = '<PaymentNotification Stage="false">
  <MerchantReference>100004117</MerchantReference>
  <TransactionType>PAYMENT</TransactionType>
  <TransactionState>SUCCESSFUL</TransactionState>
  <ResultCode>00</ResultCode>
  <ResultMessage>Successful</ResultMessage>
  <PayUReference>1167986976014</PayUReference>
  <Basket>
    <Description>Store Order Number:100004117</Description>
    <AmountInCents>100</AmountInCents>
    <CurrencyCode>ZAR</CurrencyCode>
    <Products/>
  </Basket>
  <PaymentMethodsUsed>
    <Eft BankName="ABSA" AmountInCents="100" Reference="CUMVSIUPFG" AccountNumber="4077920871" BranchNumber="632005" AccountType="Cheque" TimeLimit="168" Currency="ZAR"/>
  </PaymentMethodsUsed>
  <IpnExtraInfo>
    <ResponseHash></ResponseHash>
  </IpnExtraInfo>
</PaymentNotification>';

然后json解码它

$returnData = json_decode(json_encode(simplexml_load_string($postData)),true);

我可以取回物体,例如

$cost_amount = $returnData['Basket']['AmountInCents'];

但是我如何获得Eft中的属性,例如BankName?

我尝试过这些,但没有成功

$paid_amount = $returnData['PaymentMethodsUsed']['CreditCard']['@AmountInCents'];
and
$paid_amount = $returnData[0]->PaymentMethodsUsed[0]->CreditCard->AmountInCents;

对于这种情况,为什么不正常遍历节点,并使用->attributes()方法:

$postData = '<PaymentNotification Stage="false">
  <MerchantReference>100004117</MerchantReference>
  <TransactionType>PAYMENT</TransactionType>
  <TransactionState>SUCCESSFUL</TransactionState>
  <ResultCode>00</ResultCode>
  <ResultMessage>Successful</ResultMessage>
  <PayUReference>1167986976014</PayUReference>
  <Basket>
    <Description>Store Order Number:100004117</Description>
    <AmountInCents>100</AmountInCents>
    <CurrencyCode>ZAR</CurrencyCode>
    <Products/>
  </Basket>
  <PaymentMethodsUsed>
    <Eft BankName="ABSA" AmountInCents="100" Reference="CUMVSIUPFG" AccountNumber="4077920871" BranchNumber="632005" AccountType="Cheque" TimeLimit="168" Currency="ZAR"/>
  </PaymentMethodsUsed>
  <IpnExtraInfo>
    <ResponseHash></ResponseHash>
  </IpnExtraInfo>
</PaymentNotification>';
$xml = simplexml_load_string($postData);
$cents = (string) $xml->PaymentMethodsUsed->Eft->attributes()->AmountInCents;
echo $cents; // 100

很喜欢解决这个问题。完全采用了打击和审判的方法。我的方法:我试图通过以下方式对PaymentMethodUsed数组进行json_encode:

 $x = $returnData['PaymentMethodsUsed'];
 echo json_encode($x);

结果是:

{"Eft":{"@attributes":{"BankName":"ABSA","AmountInCents":"100","Reference":"CUMVSIUPFG","AccountNumber":"4077920871","BranchNumber":"632005","AccountType":"Cheque","TimeLimit":"168","Currency":"ZAR"}}}

所以,猜测方法,我希望你能得到你想要的价值使用:

echo $returnData['PaymentMethodsUsed']['Eft']['@attributes']['BankName'];