2016-04-14 110 views
1

我有一個政府API的JSON輸出,我需要使用PHP顯示它。問題是我無法使用多於一次的foreach,或者它不起作用。我無法將所有標準加載到第一個foreach中,因爲第一個數據ACASS返回3個結果,其後的所有字段將顯示3次。每個字段可能會返回1-10個結果,因此需要有一個可以解釋變量的系統。PHP JSON解析問題

我在想,解決的辦法是將我需要顯示的所有JSON項目放到第一個foreach中,但將它們設置爲僅在顯示它們時才顯示。這或使用我目前的編碼系統,但不知何故帳戶的變數。

任何潛在的解決方案,非常感謝。

這是JSON輸出... https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY

下面是我使用的PHP ...

echo "ACASS ID:".$decoded_results['sam_data']['registration']['qualifications']['acass']['id']."</br>"; 

foreach($decoded_results['sam_data']['registration']['qualifications']['acass']['answers'] as $acass) 

    { 

    echo 'Answer Text:'.$acass['answerText'].'</br>'; 
    echo 'ACASS Section:'.$acass['section'].'</br>'; 

    } 

$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm']; 

    echo 'Former Firm ID:'.$formerfirm['id'].'</br>'; 
    echo 'Former Firm Year Established:'.$formerfirm['yearEstablished'].'</br>'; 
    echo 'Former Firm Name:'.$formerfirm['name'].'</br>'; 
    echo 'Former Firm DUNS'.$formerfirm['duns'].'</br>'; 

我盡我所能去明智的保持這種短期和簡單的問題/代碼。總之,問題在於,如果您查看JSON,數據層次會在ACASS/Answers下面顯示大量信息,然後顯示下一個類別。我不知道會有多少迴應,我不知道如何解釋這些變數。

我想感謝這些董事會中的每個人,他們引導我成爲新成員,並幫助我發佈更清晰,更簡潔的問題。同樣感謝所有花時間幫助我學習如何成爲更好的程序員的人。

+2

你確定你想要在這裏的所有數據,包括API中的API密鑰嗎? – Pevara

+0

您是否記得在將結果作爲數組使用之前傳遞第二個參數?例如:'$ decry_results = json_decode($ jsonString,true);' – CarlosCarucce

+0

這些數據是公開可用的,API密鑰是我爲這個purpore準備的,謝謝​​。我感謝你爲我尋找。還有卡洛斯我不確定我是否跟着你,我以爲我是通過寫前者來做到這一點的[2]。我跳過了第二個參數,只是我沒有考慮到這個事實,可能有超過一個或兩個甚至10個返回的結果。 –

回答

2

使用像http://jsonviewer.stack.hu/這樣的工具可視化您的json結構。它有很多幫助。

<?php 

$url = "https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY"; 

$contents = json_decode(file_get_contents($url)); 

// echo var_dump($contents); 

$sam_data = $contents->sam_data; 

// echo var_dump($sam_data); 

$registration = $sam_data->registration; 

//echo var_dump($registration); 
$acass = $contents->sam_data->registration->qualifications->acass; 
$id = $acass->id; 

echo "id: ". $id . "<br />"; 

//echo var_dump($acass->answers); 

foreach($acass->answers as $answer) { 

    if(isset($answer->FormerFirm)) { 
     $formerFirm = $answer->FormerFirm;  
     echo var_dump($formerFirm); 
    } 

} 
+0

請記住,在使用帶有url的'file_get_contents'之前,您必須允許讀取外部文件,如下所述:http://stackoverflow.com/a/3488430/3435728 – CarlosCarucce

+0

@marko啊!一個很好的工具,直接進入我的書籤。謝謝 – YvesLeBorg

+0

從那時起我可以繼續構建它?每個元素的返回結果有多少?例如,如果返回5個ACASS結果,它下面的嵌套JSON信息的下一個類別(formerFirm)是否關閉?我只是想了解這段代碼是如何工作的,而不是僅僅剪切和粘貼它,並且永遠不知道。 –