2016-04-13 10 views
1

Also versuche ich, mehrere Felder aus einer JSON-Zeichenfolge mit PHP zurückzugeben, aber wenn ich versuche, foreach zweimal zu verwenden, wird die zweite nicht angezeigt. Die JSON-Daten haben einige Informationen, die eine unterschiedliche Anzahl von Feldern zurückgeben, und ich möchte, dass sie bei Bedarf 1 oder 10 zurückgeben können. Der Code, den ich bis jetzt habe, funktioniert gut dafür, aber wenn ich eine andere foreach nachher zurückkehre, taucht nichts auf. Wenn ich die Felder Ich versuche enthalten in der zweiten foreach auf den ersten dann manchmal viele Extras hinzufügen, erstellt die ersten Felder basiert weg zurück zu sein möglicherweise 10.JSON PHP foreach Parsing Problem?

Hier ist die PHP

foreach($decoded_results['sam_data']['registration']['qualifications']['acass']['answers'] as $acass) 
{ 
    echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText'] ? 'Yes' : 'No') .'</br>'; 

    echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 

} 

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

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerFirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerFirm['yearEstablished'].'</br>'; 

} 

Hier ist die JSON

"qualifications": { 

     "acass": { 

      "id": "SF330", 

      "answers": [ 

       {}, 

       { 

       "answerText": "Yes", 

       "section": "SF330.2" 

       }, 

       { 

       "FormerFirm": { 

        "id": 1, 

        "yearEstablished": aaaaaaaaa, 

        "name": "aaaaaaaaaaa", 

        "duns": aaaaaaaaaa 

       }, 

die JSON Struktur Qualifikationen/acass geht und Antworttext und Abschnitt sind auf der gleichen Ebene wie die ehemalige Firma dann.

Jede Hilfe, die Sie zur Verfügung stellen, wird sehr geschätzt. Vielen Dank für Ihre Zeit.

+0

Bitte geben Sie die gültige ** JSON ** Sie dekodieren –

+0

{"sam_data": {"Registrierung": {"govtBusinessPoc": {"lastName": "EAVES", "Titel": "OFFICE MANAGER", " Adresse ": {" zip ":" 72301 "," countryCode ":" USA "," line1 ":" 207 West Bond Avenue "," stateorProvince ":" AR "," Stadt ":" West Memphis "}, "email": "[email protected]", "usPhone": "8707356502", "firstName": "KELLY"}, "Qualifikationen": {"acass": {"id": "SF330", "Antworten" : [{"answerText": "Ja", "Abschnitt": "SF330.1"}, {"answerText": "Ja", "Abschnitt": "SF330.2"}, {"FormerFirm": {"id ": 1," yearEstablished ": 1968," name ":" Fowler/Garey Architects, PA "," duns ": 960604007} –

+0

@JohnChase Der JSON, den Sie oben angegeben haben, ist kein gültiger JSON, um ihn zu dekodieren –

Antwort

4

Hier ein Beispiel JSON

{ 
    "sam_data": { 
    "registration": { 
     "govtBusinessPoc": { 
     "lastName": "EAVES", 
     "title": "OFFI‌​CEMANAGER", 
     "address": { 
      "zip": "72301", 
      "countryCode": "USA", 
      "line1": "207 West Bond Ave.", 
      "stateorProvince": "AR", 
      "city": "West Memphis" 
     }, 
     "email": "[email protected]", 
     "usPhone": "8707356502", 
     "firstName": "KE‌​LLY" 
     }, 
     "qualifications": { 
     "acass": { 
      "id": "SF330", 
      "answers": [ 
      { 
       "answerText": "Yes", 
       "section": "SF330.1" 
      }, 
      { 
       "answerText": "Yes", 
       "section": "SF330.2" 
      }, 
      { 
       "FormerFirm": { 
       "id": 1, 
       "yearEstablished": 1968, 
       "name": "Fowler/Garey Architects, P.A.", 
       "duns": 960604007 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

es PHP

richtig anzuzeigen
# convert to array 
# $data = json data 
$decoded_results = json_decode($data, true); 

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

foreach ($answers as $key => $acass) { 

    if (isset($acass['answerText']) && isset($acass['section'])) { 

     echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText']) .'</br>'; 

     echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 
    } 
} 

# get the FormerFirm 
# using the array index of answers[2]; 
$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm']; 

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerfirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerfirm['yearEstablished'].'</br>'; 

Ausgabe ::

ACASS Answer Text: Yes 
ACASS Section: SF330.1 
ACASS Answer Text: Yes 
ACASS Section: SF330.2 
Former Firm ID: 1 
Former Firm Year Established: 1968 

Hoffe, dass es

helfen
+0

Fehlt diesem Code Klammern oder Zeichen? Wenn ich es in meinen php eingeben und die Seite laden gehe, passiert nichts. Danke, dass du dir die Zeit genommen hast zu antworten! –

+0

die JSON, die zur Verfügung gestellt wurde, ist ein ungültiger JSON, also habe ich es behoben, gibt es keine schließenden Klammern –

+0

Hmm, also habe ich den Code ausprobiert und es funktioniert. Ich schätze, dass viel anderes, aber ein anderes Problem, das ich traf, die Tatsache war, wenn ich diesen Code wiederhole, um Elemente unter denen, die ich zitierte, zu analysieren, aber nur wenn ein Datensatz pro Element zurückgegeben wird. Wenn mehr als eins zurückgibt, funktioniert es nicht. –

-2
{ 
    "sam_data": { 
    "registration": { 
     "govtBusinessPoc": { 
     "lastName": "EAVES", 
     "title": "OFFI‌​CEMANAGER", 
     "address": { 
      "zip": "72301", 
      "countryCode": "USA", 
      "line1": "207 West Bond Ave.", 
      "stateorProvince": "AR", 
      "city": "West Memphis" 
     }, 
     "email": "[email protected]", 
     "usPhone": "8707356502", 
     "firstName": "KE‌​LLY" 
     }, 
     "qualifications": { 
     "acass": { 
      "id": "SF330", 
      "answers": [ 
      { 
       "answerText": "Yes", 
       "section": "SF330.1" 
      }, 
      { 
       "answerText": "Yes", 
       "section": "SF330.2" 
      }, 
      { 
       "FormerFirm": { 
       "id": 1, 
       "yearEstablished": 1968, 
       "name": "Fowler/Garey Architects, P.A.", 
       "duns": 960604007 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
To display it properly PHP 

# convert to array 
# $data = json data 
$decoded_results = json_decode($data, true); 

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

foreach ($answers as $key => $acass) { 

    if (isset($acass['answerText']) && isset($acass['section'])) { 

     echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText']) .'</br>'; 

     echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 
    } 
} 

# get the FormerFirm 
# using the array index of answers[2]; 
$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm']; 

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerfirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerfirm['yearEstablished'].'</br>'; 

Das Problem gelöst, lief ein anderes Problem, aber für dieses Problem war dies die Lösung. Danke Oli Soproni B!