2016-04-14 15 views
1

Ich habe diese JSON-Ausgabe von einer Regierung API, ich muss es mit PHP anzeigen. Das Problem ist, ich kann foreach nicht mehr als einmal hintereinander verwenden oder es funktioniert nicht. Ich kann nicht alle Kriterien in die erste foreach laden, weil das erste Stück Daten ACASS 3 Ergebnisse zurückgibt, alle Felder danach werden 3 mal angezeigt. Jedes Feld kann 1-10 Ergebnisse liefern, daher muss ein System vorhanden sein, das Variablen berücksichtigt.PHP JSON Parsing Problem

Ich denke, die Lösung besteht darin, alle JSON-Elemente, die ich brauche, in der ersten foreach anzuzeigen, aber sie nur anzuzeigen, wenn sie ausgefüllt sind. Das oder das aktuelle Codierungssystem benutze ich aber irgendwie für variable Zahlen.

Alle möglichen Lösungen werden sehr geschätzt.

Dies ist die JSON Ausgabe ... https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY

Hier ist die PHP Ich verwende ...

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>'; 

ich mein Bestes tat klug, diese kurze und einfache Frage/Code zu halten. Zusammenfassend ist das Problem, wenn Sie sich die JSON anschauen, macht die Datenhierarchie viele Informationen unter ACASS/Answers und dann die nächste Kategorie. Ich weiß nie, wie viele Antworten es geben wird und ich bin mir nicht sicher, wie ich diese Variablen berücksichtigen soll.

Ich möchte allen auf diesen Boards danken, die mich als neues Mitglied geführt und mir sauberere, prägnantere Fragen geholfen haben. Danke auch an alle, die sich ihre Zeit genommen haben, um mir zu helfen, ein besserer Programmierer zu werden.

+2

Sind Sie sicher, dass Sie alle Daten hier haben möchten, einschließlich des API-Schlüssels in der URL? – Pevara

+0

haben Sie daran gedacht, den zweiten Parameter zu übergeben, bevor Sie das Ergebnis als Array bearbeiten? Beispiel: '$ decoded_results = json_decode ($ jsonString, true);' – CarlosCarucce

+0

Die Daten sind öffentlich verfügbar und der API-Schlüssel ist einer, den ich nur für diesen Zweck bekommen habe, danke. Ich weiß es zu schätzen, dass du auf mich aufpasst. Auch Carlos, ich bin mir nicht sicher, ob ich dir folge, ich dachte, ich hätte das getan, indem ich Ex-Kanzlei geschrieben habe. Ich überspringe den zweiten Parameter, nur dass die Art, wie ich sie habe, nicht für die Tatsache verantwortlich ist, dass mehr als ein oder zwei oder sogar 10 Ergebnisse in dieser Position zurückgegeben werden können. –

Antwort

2

Verwenden Sie ein Tool wie http://jsonviewer.stack.hu/ für die Visualisierung Ihrer JSON-Struktur. Es hilft sehr.

<?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

Denken Sie daran, dass Sie externe Datei lesen müssen, bevor Sie 'file_get_contents' mit einer URL verwenden, wie hier beschrieben: http://stackoverflow.com/a/3488430/3435728 – CarlosCarucce

+0

@marko ah! ein nettes Werkzeug, direkt in meine Lesezeichen. Danke – YvesLeBorg

+0

Ich könnte fortfahren, es von diesem Punkt an zu strukturieren? Ist es wichtig, wie viele Ergebnisse jedes Element hat? Wenn zum Beispiel 5 ACASS-Ergebnisse zurückgegeben werden, wird die nächste Kategorie von verschachtelten JSON-Informationen darunter (früherer Befund) ausgeschaltet sein? Ich versuche nur zu verstehen, wie dieser Code funktioniert, anstatt ihn einfach zu schneiden und einzufügen und nie zu wissen. –