2009-08-13 29 views
6

Ich habe die folgende JSON-Zeichenfolge und ich möchte nur die E-Mail-Adresse abrufen. Wie mache ich das in PHP?JSON dekodieren 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 protected]","searchCommunicationValue":"[email protected]","listed":"true","communicationComment":null,"createdDate":"2008-11-10T12:31:26","lastUpdatedDate":"2009-08-11T23:39:06"}]}} 
+1

Ich möchte diese Frage nur hatte: Ich habe eine JSON codierte Zeichenfolge und möchte die E-Mail-Adresse aus, um es abzurufen, aber nicht verstehen, wie json_decode verwenden und den Wert aus den Ergebnissen abzurufen. Kann mir jemand helfen, dies in PHP zu tun? Ich bin es gewohnt, dass die Fragen komplizierter sind, und dieser hat mich geworfen. :) – TheJacobTaylor

+0

X-Ref: [Kann eine Variable in der Ausgabe von print_r() sehen, aber nicht sicher, wie man im Code darauf zugreift] (http://stackoverflow.com/q/6322084/367456) – hakre

Antwort

8

Eine andere Variante, wie inerte es mag es Zugang wäre DID:

$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 protected]","searchCommunicationValue":"[email protected]","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."<br />"; 
+0

Das ist großartig! Es macht den Job perfekt. Vielen Dank! – pgtips

14

Betrachtet man json_decode d Sie Daten auf diese Weise haben:

$data = json_decode($json); 

Sie können var_dump(na ja, es ist Ausgabe sieht besser aus Art und Weise verwendet werden, wenn mit der Xdebug Erweiterung, die auf haben, ist schön eine Entwicklungsmaschine, weiß btw) zu dem, was in Ihren Daten ist:

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

Sie werden so etwas wie dieses:

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 protected]' (length=18) 
       public 'searchCommunicationValue' => string '[email protected]' (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) 

Was bedeutet, sollten Sie in der Lage sein, die Daten zugreifen, die Sie suchen mit etwas wie folgt aus:

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

Was Sie erhalten:

string '[email protected]' (length=18) 
string '[email protected]' (length=18) 

communications“ ist ein Objekt, das „communication“ enthält, das ein Array von Gegenständen, die jeweils ein communicationGeneralType enthält, die man bestimmen können, ob die aktuelle Kommunikation eine EMail ist oder nicht.

Wenn dies der Fall ist, können Sie die Felder communicationValue oder searchCommunicationValue verwenden.

Und ich sehe nicht wirklich einen Weg, dies zu tun, ohne jedes communication Element iterieren ...

hoffe, das hilft!

+2

Brilliant!+1 für xdebug! – Swanand

+0

Sehr hilfreich, danke! – pgtips

6

Sie könnten json_decode() verwenden. Ihr Beispiel String gibt es ein bisschen kompliziert für mich, gerade jetzt zu denken, aber als Beispiel für meine eigenen:

$json = '{"a":"apples","b":["bananas","boysenberries"],"c":"carrots"}'; 

$arr = json_decode($json); 
echo $arr['a']; // "apples" 
echo $arr['b'][0]; // "bananas" 
+0

Ja, das ist was ich will, aber ich kann die Besonderheiten nicht herausfinden? Jede Hilfe wird sehr geschätzt. – pgtips

+0

welcher Teil ist das Problem? – nickf

+0

Was wäre der Name und der Schlüssel des Arrays für die E-Mail-Adresse? – pgtips

0
<?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 protected]","searchCommunicationValue":"[email protected]","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 Index 3 von communication bekommen, Sie‘ in Schwierigkeiten. Sie müssen wahrscheinlich communication loopen und nach diesen Zeichenfolgen auf ihren Schlüsseln/Werten suchen.

0

Schönes Beispiel von mir geschrieben

Übergeben Sie die json_object und 1 in Funktion, sehen Sie 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."-<br />"; 
       $num++; 
       decodejson($tvalue,$num); 
      }else 
       echo str_repeat("&nbsp;", $num).$key."->".$tvalue."<br />"; 
     } 
    }else 
     echo str_repeat("&nbsp;", $num).$key."->".$value."<br />"; 
}