2009-08-13 20 views
6

Tengo la siguiente cadena json y quiero recuperar solo la dirección de correo electrónico de la misma. ¿Cómo lo hago en php?json decode en 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

Ojalá esta pregunta sólo tenía: Tengo una cadena codificada JSON y me gustaría recuperar la dirección de correo electrónico de ella, pero no entienden cómo utilizar json_decode y recuperar el valor de los resultados. ¿Alguien puede ayudarme a hacer esto en PHP? Estoy acostumbrado a que las preguntas sean más complicadas y esta me tiró. :) – TheJacobTaylor

+0

X-Ref: [Capaz de ver una variable en la salida de print_r(), pero no estoy seguro de cómo acceder a ella en el código] (http://stackoverflow.com/q/6322084/367456) – hakre

Respuesta

8

Otra vuelta de tuerca a la forma inerte no sería para acceder a ella le gusta:

$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

Esto es genial! Hace el trabajo a la perfección. ¡Gracias! – pgtips

14

Teniendo en cuenta que tiene json_decode D que los datos de esta manera:

$data = json_decode($json); 

Puede utilizar var_dump(bueno, es la producción se ve mucho mejor si se utiliza con la extensión Xdebug, lo que es bueno tener en una máquina de desarrollo, por cierto) para saber lo que está en sus datos:

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

Usted obtendrá algo como esto:

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) 

Lo que significa que debe ser capaz de acceder a los datos que está buscando con algo como esto:

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

, que pueden ayudarle:

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

"communications" es un objeto, que contiene "communication", que es una matriz de objetos, cada uno que contiene un communicationGeneralType, que le permite determinar si la comunicación actual es un correo electrónico o no.

WHen lo es, puede utilizar los campos communicationValue o searchCommunicationValue.

Y yo no veo una manera de hacer esto sin iterar sobre cada elemento communication ...

Espero que esto ayude!

+2

¡Brillante!+1 para xdebug! – Swanand

+0

¡Muy útil, gracias! – pgtips

6

Puede usar json_decode(). Su ejemplo de cadena no es un poco complicado para mí pensar en este momento, pero como un ejemplo de mi propia:

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

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

Sí, esto es lo que quiero, pero no puedo entender los detalles. Cualquier ayuda es muy apreciada. – pgtips

+0

¿qué parte es el problema? – nickf

+0

¿Cuál sería el nombre y la clave de la matriz para la dirección de correo electrónico? – 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']; 

?> 

Pero si communicationValue o searchCommunicationValue jamás salir de índice 3 de communication, que' estar en problemas Probablemente tengas que repetir el ciclo communication y buscar estas cadenas en sus claves/valores.

0

Ejemplo agradable escrito por mí

Pasar el JSON_OBJECT y 1 en función, verá todos los valores según la estructura .

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