json-декодирование в php

У меня есть следующая строка json, и я хочу извлечь из нее только адрес электронной почты. Как это сделать в 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"}]}} 

Еще один поворот в том, как 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@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."<br />"; в $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."<br />"; 

Учитывая, что у вас есть 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@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) 

Это означает, что вы должны иметь доступ к данным, которые вы ищете, например:

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

Который доставит вас:

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

« communications » – это объект, который содержит « communication », которая представляет собой массив объектов, каждый из которых содержит communicationGeneralType общий тип, который позволяет вам определить, является ли текущая связь EMail или нет.

Если это так, вы можете использовать поля communicationValue или searchCommunicationValue .

И я действительно не вижу способа сделать это без повторения каждого элемента communication

Надеюсь это поможет!

Вы можете использовать json_decode() . Ваша строка примера немного сложна для меня, чтобы подумать прямо сейчас, но как пример моего собственного:

 $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']; ?> в <?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']; ?> 

Но если communicationValue searchCommunicationValue или searchCommunicationValue когда-либо выходит из индекса 3 communication , у вас проблемы. Вам, вероятно, придется зацикливать communication и искать эти строки по своим ключам / значениям.

Хороший пример, написанный мной

Передайте 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 />"; }