2009-08-13 10 views
6

私は以下のjson文字列を持っています。私はそれから電子メールアドレスを取得したいと思います。どのように私はPHPでそれを行うのですか?json decode 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

私はこの質問にはちょうどよかった:私は、JSONエンコードされた文字列を持って、それからの電子メールアドレスを取得したいと思いますが、json_decodeを使用して、結果から値を取得する方法を理解していません。誰かがPHPでこれを手助けすることができますか?私は質問にもっと厄介なことに慣れており、この1つは私を投げた。 :) – TheJacobTaylor

+0

X-Ref:[print_r()の出力で変数を見ることはできますが、コードでアクセスする方法はわかりません](http://stackoverflow.com/q/6322084/367456) – hakre

答えて

8

inerteはそれが好きでそれにアクセスすることですやった方法についてのもう一つのねじれ:私が

を書か

$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

これは素晴らしいです!それは完璧な仕事です。ありがとう! – pgtips

14

あなたはjson_decode Dあなたのデータこうして持って考える:あなたが使用することができます

$data = json_decode($json); 

var_dump(まあ、それは上があると便利ですXdebug拡張子、で使用される場合、出力は道良く見えるのですところで開発マシン、)あなたのデータに何があるか知っている:

// Allows you to know what's in the data ;-) 
var_dump($data); 
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) 

あなたはこのような何かを探しているデータにアクセスすることができるはずです意味::210あなたはこのような何かを得るでしょう

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

あなたを取得しますどの:

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

communications」は決定することができる「communication」を含むオブジェクト、オブジェクトの配列、communicationGeneralTypeを含む各一つであります現在の通信が電子メールかどうかを判断する。

場合は、communicationValueフィールドまたはsearchCommunicationValueフィールドを使用できます。このことができます

そして、私は本当にすべてのcommunicationの要素を反復処理せずにこれを行う方法を見ていない...

願っています!

+2

Brilliant!+1のxdebug! – Swanand

+0

非常に参考になりました、ありがとうございます! – pgtips

6

json_decode()を使用できます。あなたの例の文字列は、そこに私が今考えするのは少し複雑ですが、私自身の例として:

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

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

はい、これは私が欲しいものですが、詳細を理解できませんか?どんな助けも大歓迎です。 – pgtips

+0

どの部分が問題ですか? – nickf

+0

電子メールアドレスの配列名とキーはどうなりますか? – 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']; 

?> 

しかしcommunicationValueまたはsearchCommunicationValueあれば、これまでcommunicationのインデックス3から抜け出す、あなたは」トラブルに陥るおそらく、communicationをループし、これらの文字列をそのキー/値で検索する必要があります。

0

ニースの例では、構造ごとにすべての値が表示され、機能にjson_objectと1を渡します。

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 />"; 
}