2014-09-27 4 views
0

이 온라인 답변을 찾지 못하는 것 같습니다. 그러나 xml과 json에 익숙하지 않아서 무엇을 검색해야할지 모르겠다 고 생각합니다.json decode get 속성

나는이 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에서 가져 옵니까? 은행 이름?

나는 일반적으로 노드를 통과하지 왜 성공이 경우를 들어

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

왜이 방법은 데이터를 완벽하게 보존하지 않기 때문에 사용하지 않는 것이 가장 좋은 방법인가요? 그것도 정상적인 방법으로 처리하십시오. – Ghost

+0

PHP 매뉴얼에서 [PHP Manual] (http://php.net/manual/en/)에서 처음 읽는 것은 사이트에있는 많은 중복 옆에 있습니다. simplexml.examples-basic.php) – hakre

답변

0

, 이러한 시도하고 ->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 
-1

을 즐겼다. 히트 및 시험 방법을 완전히 사용했습니다. 내 방식 : 은 내가으로 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"}}} 

그래서, 접근 방식을 짐작하고 난 당신이 사용하여 원하는 값을 얻을 수 있기를 바랍니다 :