2009-08-13 42 views
6

Tôi có chuỗi json sau và tôi muốn chỉ lấy địa chỉ email từ đó. Làm thế nào để làm điều đó trong php?giải mã json trong 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

Tôi muốn câu hỏi này chỉ có: Tôi có chuỗi được mã hóa JSON và muốn lấy địa chỉ email từ nó, nhưng không hiểu cách sử dụng json_decode và truy xuất giá trị từ kết quả. Ai đó có thể giúp tôi làm điều này trong PHP. Tôi quen với những câu hỏi phức tạp hơn và câu hỏi này đã ném tôi. :) – TheJacobTaylor

+0

X-Ref: [Có thể thấy một biến trong print_r() 's đầu ra, nhưng không chắc chắn làm thế nào để truy cập nó trong mã] (http://stackoverflow.com/q/6322084/367456) – hakre

Trả lời

8

Một xoắn về cách inerte sao nó sẽ được truy cập vào nó thích:

$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

Điều này thật tuyệt! Nó thực hiện công việc một cách hoàn hảo. Cảm ơn! – pgtips

14

Xét bạn có json_decode d cho bạn dữ liệu theo cách này:

$data = json_decode($json); 

Bạn có thể sử dụng var_dump(tốt, đó là đầu ra trông cách tốt hơn nếu sử dụng với phần mở rộng Xdebug, đó là tốt đẹp để có trên máy phát triển, btw) để biết nội dung trong dữ liệu của bạn:

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

Bạn sẽ nhận được một cái gì đó như thế này:

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) 

Có nghĩa là bạn sẽ có thể truy cập vào dữ liệu bạn đang tìm kiếm với một cái gì đó như thế này:

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

nào sẽ giúp bạn:

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

"communications" là một đối tượng có chứa "communication", là một mảng đối tượng, mỗi đối tượng có chứa một communicationGeneralType, cho phép bạn xác định cho dù giao tiếp hiện tại là một EMail hay không.

Khi đó, bạn có thể sử dụng các trường communicationValue hoặc searchCommunicationValue.

Và tôi không thực sự nhìn thấy một cách để làm điều này mà không cần lặp qua tất cả các yếu tố communication ...

Hope this helps!

+2

Brilliant!+1 cho xdebug! – Swanand

+0

Rất hữu ích, cảm ơn bạn! – pgtips

6

Bạn có thể sử dụng json_decode(). chuỗi Ví dụ bạn có một chút phức tạp cho tôi để suy nghĩ về ngay bây giờ, nhưng như một ví dụ của riêng tôi:

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

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

Có đây là những gì tôi muốn nhưng tôi không thể tìm ra các chi tiết cụ thể? Bất kỳ sự giúp đỡ nào cũng được đánh giá cao. – pgtips

+0

phần nào là vấn đề? – nickf

+0

Tên và khóa mảng sẽ là gì đối với địa chỉ email? – 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']; 

?> 

Nhưng nếu communicationValue hoặc searchCommunicationValue bao giờ được ra khỏi chỉ số 3 của communication, bạn' đang gặp rắc rối. Có thể bạn sẽ phải lặp lại communication và tìm kiếm các chuỗi này trên các khóa/giá trị của nó.

0

đẹp ví dụ được viết bởi tôi

Vượt qua JSON_OBJECT và 1 chức năng, bạn sẽ thấy tất cả các giá trị theo cấu trúc .

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 />"; 
} 
Các vấn đề liên quan