How to decode a JSON string in PHP?

后端 未结 9 1111
挽巷
挽巷 2020-12-02 02:18

I have a JSON string that looks something like this:

{\"addresses\":{\"address\":[{\"@array\":\"true\",\"@id\":\"888888\",\"@uri\":\"xyz\",\"household\":{\"@         


        
相关标签:
9条回答
  • 2020-12-02 02:30

    print_r is your friend for figuring out JSON structure.

    <?php
    
    $addresses = json_decode('{"addresses":{"address":[{"@array":"true","@id":"888888","@uri":"xyz","household":{"@id":"44444","@uri":"xyz"},"person":{"@id":"","@uri":""},"addressType":{"@id":"1","@uri":"xyz","name":"Primary"},"address1":"xyz","address2":null,"address3":null,"city":"xyz","postalCode":"111111"}]}}');
    
    $_SESSION['address1'] = $addresses->addresses->address[0]->address1;
    $_SESSION['address2'] = $addresses->addresses->address[0]->address2;
    $_SESSION['address3'] = $addresses->addresses->address[0]->address3;
    $_SESSION['city'] = $addresses->addresses->address[0]->city;
    $_SESSION['postalCode'] = $addresses->addresses->address[0]->postalCode;
    
    print_r($_SESSION);
    

    Results in:

    Array
    (
        [address1] => xyz
        [address2] => 
        [address3] => 
        [city] => xyz
        [postalCode] => 111111
    )
    
    0 讨论(0)
  • 2020-12-02 02:31

    Maybe try $results['addresses']['address']['address1'];

    Not sure why you're using strstr. but it doesn't look like it'd change anything in this instance.

    0 讨论(0)
  • 2020-12-02 02:32

    json_decode will decode a json-formatted string into a PHP object.

    Try this:

    $results = json_decode($address);
    $results['address1'] = $results->addresses->address[0]->address1;
    $results['address2'] = $results->addresses->address[0]->address2;
    $results['address3'] = $results->addresses->address[0]->address3;
    $results['city'] = $results->addresses->address[0]->city;
    $results['postalCode'] = $results->addresses->address[0]->postalCode;
    

    Edit - updated, I misread your JSON at first.

    0 讨论(0)
  • 2020-12-02 02:34

    you can use print_r to output the $results to find out exactly what the object output looks like.

    0 讨论(0)
  • 2020-12-02 02:36

    If you do print_r of your array, you see how the layout is:

    stdClass Object
    (
      [addresses] => stdClass Object
        (
          [address] => Array
            (
              [0] => stdClass Object
                (
                  [@array] => true
                  [@id] => 888888
                  [@uri] => xyz
                  [household] => stdClass Object
                    (
                      [@id] => 44444
                      [@uri] => xyz
                    )
    
                  [person] => stdClass Object
                    (
                      [@id] => 
                      [@uri] => 
                    )
    
                  [addressType] => stdClass Object
                    (
                      [@id] => 1
                      [@uri] => xyz
                      [name] => Primary
                    )
    
                  [address1] => xyz
                  [address2] => 
                  [address3] => 
                  [city] => xyz
                  [postalCode] => 111111
                )
            )
        )
    )
    
    0 讨论(0)
  • 2020-12-02 02:43

    This one will put all scalar and null values into session where key does not begin with a @

    $jsonString = '{"addresses":{"address":[{"@array":"true","@id":"888888","@uri":"xyz","household":{"@id":"44444","@uri":"xyz"},"person":{"@id":"","@uri":""},"addressType":{"@id":"1","@uri":"xyz","name":"Primary"},"address1":"xyz","address2":null,"address3":null,"city":"xyz","postalCode":"111111"}]}}';
    
    $result = json_decode($jsonString);
    
    // will put *all* scalar and null values into session where key does not begin with a @
    foreach($result->addresses->address[0] as $key=>$value) {
        if (substr($key, 0, 1) != '@'  && (is_scalar($value) || is_null($value)) ) {
            $_SESSION[$key] = $value;
        } 
    }
    
    print_r($_SESSION);
    
    ?>
    
    0 讨论(0)
提交回复
热议问题