JSON entschlüsseln in PHP

Ich habe die folgende JSON-Zeichenfolge und möchte nur die E-Mail-Adresse abrufen. Wie mache ich das in PHP?

{"communications":{"communication":[{"@array":"true","@id":"23101384","@uri":"xyz/v1/Communications/1111","household":{"@id":"111111","@uri":"xyz/v1/Households/5465465"},"person":{"@id":"","@uri":""},"communicationType":{"@id":"1","@uri":"xyz/v1/Communications/CommunicationTypes/1","name":"Home Phone"},"communicationGeneralType":"Telephone","communicationValue":"1111","searchCommunicationValue":"2693240758","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/111111111","household":{"@id":"14436295","@uri":"xyz/v1/Households/11111"},"person":{"@id":"2222222","@uri":"xyz/v1/People/22222222"},"communicationType":{"@id":"2","@uri":"xyz/v1/Communications/CommunicationTypes/2","name":"Work Phone"},"communicationGeneralType":"Telephone","communicationValue":"11111","searchCommunicationValue":"789787987","listed":"false","communicationComment":null,"createdDate":"2009-08-09T15:49:27","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/11111","household":{"@id":"1111","@uri":"xyz/v1/Households/1111"},"person":{"@id":"244404","@uri":"xyz/v1/People/1111"},"communicationType":{"@id":"3","@uri":"xyz/v1/Communications/CommunicationTypes/3","name":"Mobile"},"communicationGeneralType":"Telephone","communicationValue":"22222","searchCommunicationValue":"5475454","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"15454","@uri":"xyz/v1/Communications/111111","household":{"@id":"14436295","@uri":"xyz/v1/Households/1111"},"person":{"@id":"244444474","@uri":"xyz/v1/People/111111"},"communicationType":{"@id":"4","@uri":"xyz/v1/Communications/CommunicationTypes/4","name":"Email"},"communicationGeneralType":"Email","communicationValue":"email@needthis.com","searchCommunicationValue":"email@needthis.com","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:39:06"}]}} 

Eine weitere Variante der Intree wäre, wie folgt darauf zuzugreifen:

 $json_object = '{"communications": {"communication": [{"@array":"true","@id":"23101384","@uri":"xyz/v1/Communications/1111","household": {"@id":"111111","@uri":"xyz/v1/Households/5465465"}, "person": {"@id":"","@uri":""}, "communicationType":{"@id":"1","@uri":"xyz/v1/Communications/CommunicationTypes/1","name":"Home Phone"}, "communicationGeneralType":"Telephone","communicationValue":"1111","searchCommunicationValue":"2693240758", "listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"}, {"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/111111111","household": {"@id":"14436295","@uri":"xyz/v1/Households/11111"}, "person": {"@id":"2222222","@uri":"xyz/v1/People/22222222"}, "communicationType": {"@id":"2","@uri":"xyz/v1/Communications/CommunicationTypes/2","name":"Work Phone"}, "communicationGeneralType":"Telephone","communicationValue":"11111","searchCommunicationValue":"789787987","listed":"false", "communicationComment":null,"createdDate":"2009-08-09T15:49:27","lastUpdatedDate":"2009-08-11T23:40:02"}, {"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/11111","household": {"@id":"1111","@uri":"xyz/v1/Households/1111"}, "person":{"@id":"244404","@uri":"xyz/v1/People/1111"}, "communicationType":{"@id":"3","@uri":"xyz/v1/Communications/CommunicationTypes/3","name":"Mobile"}, "communicationGeneralType":"Telephone","communicationValue":"22222","searchCommunicationValue":"5475454","listed":"true", "communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"}, {"@array":"true","@id":"15454","@uri":"xyz/v1/Communications/111111","household":{"@id":"14436295","@uri":"xyz/v1/Households/1111"}, "person":{"@id":"244444474","@uri":"xyz/v1/People/111111"}, "communicationType":{"@id":"4","@uri":"xyz/v1/Communications/CommunicationTypes/4","name":"Email"}, "communicationGeneralType":"Email","communicationValue":"email@needthis.com","searchCommunicationValue":"email@needthis.com","listed":"true", "communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:39:06"} ] } }'; $json_decoded = json_decode($json_object); echo "email: ".$json_decoded->communications->communication[3]->communicationValue."
";

In Anbetracht der Tatsache, dass Sie json_decode d Sie Daten auf diese Weise haben:

 $data = json_decode($json); 

Sie können var_dump (nun, seine Ausgabe sieht viel besser aus, wenn sie mit der Xdebug- Erweiterung verwendet wird, was auf einem Entwicklungscomputer gut ist, btw), um zu wissen, was in Ihren Daten steckt :

 // Allows you to know what's in the data ;-) var_dump($data); 

Du wirst so etwas bekommen:

 object(stdClass)[1] public 'communications' => object(stdClass)[2] public 'communication' => array 0 => object(stdClass)[3] public '@array' => string 'true' (length=4) public '@id' => string '23101384' (length=8) public '@uri' => string 'xyz/v1/Communications/1111' (length=26) public 'household' => object(stdClass)[4] public '@id' => string '111111' (length=6) public '@uri' => string 'xyz/v1/Households/5465465' (length=25) public 'person' => object(stdClass)[5] public '@id' => string '' (length=0) public '@uri' => string '' (length=0) public 'communicationType' => object(stdClass)[6] public '@id' => string '1' (length=1) public '@uri' => string 'xyz/v1/Communications/CommunicationTypes/1' (length=42) public 'name' => string 'Home Phone' (length=10) public 'communicationGeneralType' => string 'Telephone' (length=9) public 'communicationValue' => string '1111' (length=4) public 'searchCommunicationValue' => string '2693240758' (length=10) public 'listed' => string 'true' (length=4) public 'communicationComment' => null public 'createdDate' => string '2008-11-10T12:31:26' (length=19) public 'lastUpdatedDate' => string '2009-08-11T23:40:02' (length=19) 1 => object(stdClass)[7] public '@array' => string 'true' (length=4) public '@id' => string '11111' (length=5) public '@uri' => string 'xyz/v1/Communications/111111111' (length=31) public 'household' => object(stdClass)[8] public '@id' => string '14436295' (length=8) public '@uri' => string 'xyz/v1/Households/11111' (length=23) public 'person' => object(stdClass)[9] public '@id' => string '2222222' (length=7) public '@uri' => string 'xyz/v1/People/22222222' (length=22) public 'communicationType' => object(stdClass)[10] public '@id' => string '2' (length=1) public '@uri' => string 'xyz/v1/Communications/CommunicationTypes/2' (length=42) public 'name' => string 'Work Phone' (length=10) public 'communicationGeneralType' => string 'Telephone' (length=9) public 'communicationValue' => string '11111' (length=5) public 'searchCommunicationValue' => string '789787987' (length=9) public 'listed' => string 'false' (length=5) public 'communicationComment' => null public 'createdDate' => string '2009-08-09T15:49:27' (length=19) public 'lastUpdatedDate' => string '2009-08-11T23:40:02' (length=19) 2 => object(stdClass)[11] public '@array' => string 'true' (length=4) public '@id' => string '11111' (length=5) public '@uri' => string 'xyz/v1/Communications/11111' (length=27) public 'household' => object(stdClass)[12] public '@id' => string '1111' (length=4) public '@uri' => string 'xyz/v1/Households/1111' (length=22) public 'person' => object(stdClass)[13] public '@id' => string '244404' (length=6) public '@uri' => string 'xyz/v1/People/1111' (length=18) public 'communicationType' => object(stdClass)[14] public '@id' => string '3' (length=1) public '@uri' => string 'xyz/v1/Communications/CommunicationTypes/3' (length=42) public 'name' => string 'Mobile' (length=6) public 'communicationGeneralType' => string 'Telephone' (length=9) public 'communicationValue' => string '22222' (length=5) public 'searchCommunicationValue' => string '5475454' (length=7) public 'listed' => string 'true' (length=4) public 'communicationComment' => null public 'createdDate' => string '2008-11-10T12:31:26' (length=19) public 'lastUpdatedDate' => string '2009-08-11T23:40:02' (length=19) 3 => object(stdClass)[15] public '@array' => string 'true' (length=4) public '@id' => string '15454' (length=5) public '@uri' => string 'xyz/v1/Communications/111111' (length=28) public 'household' => object(stdClass)[16] public '@id' => string '14436295' (length=8) public '@uri' => string 'xyz/v1/Households/1111' (length=22) public 'person' => object(stdClass)[17] public '@id' => string '244444474' (length=9) public '@uri' => string 'xyz/v1/People/111111' (length=20) public 'communicationType' => object(stdClass)[18] public '@id' => string '4' (length=1) public '@uri' => string 'xyz/v1/Communications/CommunicationTypes/4' (length=42) public 'name' => string 'Email' (length=5) public 'communicationGeneralType' => string 'Email' (length=5) public 'communicationValue' => string 'email@needthis.com' (length=18) public 'searchCommunicationValue' => string 'email@needthis.com' (length=18) public 'listed' => string 'true' (length=4) public 'communicationComment' => null public 'createdDate' => string '2008-11-10T12:31:26' (length=19) public 'lastUpdatedDate' => string '2009-08-11T23:39:06' (length=19) 

Das bedeutet, dass Sie in der Lage sein sollten, auf die gesuchten Daten mit etwas wie diesem zuzugreifen:

 foreach ($data->communications->communication as $communication) { if ($communication->communicationGeneralType == 'Email') { var_dump($communication->communicationValue); var_dump($communication->searchCommunicationValue); } } 

Was dich bekommen wird:

 string 'email@needthis.com' (length=18) string 'email@needthis.com' (length=18) 

communications ” ist ein Objekt, das ” communication ” enthält, bei der es sich um ein Array von Objekten handelt, die jeweils einen communicationGeneralType , mit dem Sie feststellen können, ob die aktuelle Kommunikation eine EMail ist oder nicht.

In diesem Fall können Sie die Felder communicationValue oder searchCommunicationValue verwenden.

Und ich sehe keinen Weg, dies zu tun, ohne jedes communication durchlaufen …

Hoffe das hilft!

Sie könnten json_decode() . Ihr Beispiel String ist ein bisschen kompliziert für mich, aber als ein Beispiel für meinen eigenen:

 $json = '{"a":"apples","b":["bananas","boysenberries"],"c":"carrots"}'; $arr = json_decode($json); echo $arr['a']; // "apples" echo $arr['b'][0]; // "bananas" 
 < ?php $string = '{"communications":{"communication":[{"@array":"true","@id":"23101384","@uri":"xyz/v1/Communications/1111","household":{"@id":"111111","@uri":"xyz/v1/Households/5465465"},"person":{"@id":"","@uri":""},"communicationType":{"@id":"1","@uri":"xyz/v1/Communications/CommunicationTypes/1","name":"Home Phone"},"communicationGeneralType":"Telephone","communicationValue":"1111","searchCommunicationValue":"2693240758","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/111111111","household":{"@id":"14436295","@uri":"xyz/v1/Households/11111"},"person":{"@id":"2222222","@uri":"xyz/v1/People/22222222"},"communicationType":{"@id":"2","@uri":"xyz/v1/Communications/CommunicationTypes/2","name":"Work Phone"},"communicationGeneralType":"Telephone","communicationValue":"11111","searchCommunicationValue":"789787987","listed":"false","communicationComment":null,"createdDate":"2009-08-09T15:49:27","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"11111","@uri":"xyz/v1/Communications/11111","household":{"@id":"1111","@uri":"xyz/v1/Households/1111"},"person":{"@id":"244404","@uri":"xyz/v1/People/1111"},"communicationType":{"@id":"3","@uri":"xyz/v1/Communications/CommunicationTypes/3","name":"Mobile"},"communicationGeneralType":"Telephone","communicationValue":"22222","searchCommunicationValue":"5475454","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:40:02"},{"@array":"true","@id":"15454","@uri":"xyz/v1/Communications/111111","household":{"@id":"14436295","@uri":"xyz/v1/Households/1111"},"person":{"@id":"244444474","@uri":"xyz/v1/People/111111"},"communicationType":{"@id":"4","@uri":"xyz/v1/Communications/CommunicationTypes/4","name":"Email"},"communicationGeneralType":"Email","communicationValue":"email@needthis.com","searchCommunicationValue":"email@needthis.com","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:39:06"}]}}'; $encoded = json_decode($string, JSON_FORCE_OBJECT); echo $encoded['communications']['communication'][3]['communicationValue']; echo "\n"; echo $encoded['communications']['communication'][3]['searchCommunicationValue']; ?> 

Aber wenn communicationValue oder searchCommunicationValue jemals aus dem Index 3 der communication herauskommen, sind Sie in Schwierigkeiten. Wahrscheinlich müssen Sie die communication wiederholen und nach diesen Zeichenfolgen auf ihren Schlüsseln / Werten suchen.

Nettes Beispiel von mir geschrieben

Übergeben Sie das json_object und 1 in function, Sie sehen alle Werte wie pro Struktur.

 function decodejson($value,$num){ if (count($value,0) > 0 && is_array($value)){ foreach ($value as $key =>$tvalue){ if (is_array($tvalue)){ //echo $key."-
"; $num++; decodejson($tvalue,$num); }else echo str_repeat(" ", $num).$key."->".$tvalue."
"; } }else echo str_repeat(" ", $num).$key."->".$value."
"; }