json decode in php

前端 未结 5 1775
粉色の甜心
粉色の甜心 2020-11-29 11:32

I have the following json string and I want to retrieve just the email address from it. How do I do it in php?

{\"communications\":{\"communication\":[{\"@a         


        
相关标签:
5条回答
  • 2020-11-29 12:12
    <?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'];
    
    ?>
    

    But if communicationValue or searchCommunicationValue ever get out of index 3 of communication, you're in trouble. You'll probably have to loop communication and search for these strings on its keys/values.

    0 讨论(0)
  • 2020-11-29 12:16

    Nice example written by me

    Pass the json_object and 1 in function, you will see all values as per structure.

    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 />";
    }
    
    0 讨论(0)
  • 2020-11-29 12:25

    Another twist on how inerte did it would be to access it like:

    $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 />";
    
    0 讨论(0)
  • 2020-11-29 12:26

    Considering you have json_decoded you data this way :

    $data = json_decode($json);
    

    You can use var_dump (well, it's output looks way better if used with the Xdebug extension, which is nice to have on a development machine, btw) to know what's in your data :

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

    You'll get something like this :

    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)
    

    Which means you should be able to access the data you're looking for with something like this :

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

    Which will get you :

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

    "communications" is an object, that contains "communication", which is an array of objects, each one containing a communicationGeneralType, which allows you to determine whether the current communication is an EMail or not.

    WHen it is, you can use the communicationValue or searchCommunicationValue fields.

    And I don't really see a way of doing this without iterating over every communication element...

    Hope this helps!

    0 讨论(0)
  • 2020-11-29 12:27

    You could use json_decode(). Your example string there is a bit complicated for me to think about right now, but as an example of my own:

    $json = '{"a":"apples","b":["bananas","boysenberries"],"c":"carrots"}';
    
    $arr = json_decode($json);
    echo $arr['a']; // "apples"
    echo $arr['b'][0]; // "bananas"
    
    0 讨论(0)
提交回复
热议问题