2014-02-18 3 views
0

PHP를 사용하여 다른 웹 서버에 JSON 데이터를 검색하도록 요청하면 요청이 작동하는 것으로 보이고 var_dump를 사용하여 데이터를 액세스 할 수 있는지 확신 할 수 없습니다.JSON PHP 데이터를 성공적으로 가져 왔지만 액세스 할 수 없습니다.

이 데이터 획득에 대한 내 코드입니다 :

$response = Requests::get($mydetails); 

$array1 = json_decode(json_encode($response), true); 

을 거의 모든 나는 시도 것들 (예 : 에코 $ array1-> 동작 ->에서 그 결과> 상태) 나에게 같은 오류 메시지 제공 다음 decod 후

array(9) { 
    ["body"]=> 
    string(7017) "{"operation":{"result":{"status":"Success","message":"Request details listed successfully"},"details":[{"fields":[{"name":"requesttype","value":"Incident","type":"Pick List","displayvalue":"Request Type","allowedvalues":["Incident","Request for Change","Request For Information","Request for Work"],"mandatory":"false"},{"name":"impact","value":"Affects User","type":"Pick List","displayvalue":"Impact","allowedvalues":["Affects Business","Affects Department","Affects Group","Affects User"],"mandatory":"false"},{"name":"status","value":"Closed","type":"Pick List","displayvalue":"Status","allowedvalues":["Awaiting Customer","Awaiting Third Party","Closed","More Information Required","Open","Resolved"],"mandatory":"false"},{"name":"impactdetails","value":"-","type":"Multi Line","displayvalue":"Impact Details","allowedvalues":[""],"mandatory":"false"},{"name":"mode","value":"Phone Call","type":"Pick List","displayvalue":"Mode","allowedvalues":["Customer Portal","E-Mail","Fax","On-Site Request","Phone Call"],"mandatory":"false"},{"name":"priority","value":"Severity 2","type":"Pick List","displayvalue":"Priority","allowedvalues":["National Level 1","National Level 2","Request for Change","Severity 1","Severity 2","Severity 3","Severity 4"],"mandatory":"false"},{"name":"department","value":"General Practice","type":"Not Editable","displayvalue":"Department","allowedvalues":[""],"mandatory":"true"},{"name":"requesteremail","value":"","type":"Not Editable","displayvalue":"E-mail","allowedvalues":[""],"mandatory":"false"},{"name":"requestercontactnumber","value":"","type":"Not Editable","displayvalue" 
+1

왜 'json_decode (json_encode ($ response), true);'를 수행하고 있습니까? 인코딩 후 즉시 디코딩하는 것은 무엇입니까? '$ response' 란 무엇입니까? 왜 직접 사용할 수 없습니까? 그 문제로 해결하려는 문제는 무엇입니까? –

+0

P. '$ array1'은 객체가 아니라 배열입니다. (즉,'json_decode()'의 두 번째 매개 변수가하는 것입니다). echo $ array1 [ 'operation'] [ 'result'] [ 'status']' –

+0

다음을 수행하여 문제를 해결할 수있었습니다 : $ response = Requests :: get ($ mydetails); $ array = json_decode ($ response -> body); echo $ array-> operation-> result-> status; – djh123

답변

1

구조 :

PHP Notice: Trying to get property of non-object 

이것은 위해서 var_dump 출력의 처음 몇 줄 것이다 ing은 array이므로 객체 이동 연산자 인 ->이 아닌 $array1['body']['operation']['result']['status']과 같은 배열 연산자를 사용하여 액세스해야합니다. 또한 객체로 디코딩 수 :

$response = Requests::get($mydetails); 

$array1 = json_decode(json_encode($response)); 

하지만 당신의 반응은 아직 다만 어쩌면, 다시 인코딩하지 않고, 액세스, array 것 같다?

편집 : 코드에 대한 몇 가지 가정을하는 것은, 당신은 어쩌면이해야 후 : JSON는 것, 그래서 당신이 연관 배열에 JSON을해야합니다 디코딩을 위해 당신이 true 속성을 사용하는 경우

$response = Requests::get($mydetails); 

$array1 = json_decode($response['body'], true); 
var_dump($array1); // looks ok? 
+0

답장을 보내 주셔서 감사합니다. 'true'옵션을 제거하고 다음 코드를 변경했지만 echo $ jsondata-> operation-> result-> status;를 사용하여 데이터에 액세스 할 수 없습니다. $ response = 요청 :: get ($ myMANAGEENGINEAddressfull); $ array = json_decode (json_encode ($ response)); $ jsondata = $ array-> body; – djh123

+0

왜'json_decode (json_encode ($ response))'를 할 수 있는지 설명해 주시겠습니까? 이렇게하면 PHP 배열 ('json_encode')에서 JSON 문자열을 만들고 방금 인코딩 한 JSON 문자열 ('json_decode')에서 동일한 배열을 만듭니다. 이것은 당신이해야하는 것이 아닙니다! 해독이나 인코딩을하지 않고 바로'var_dump ($ response)'를 보여 주시겠습니까? – ddinchev

0

을 범위로 액세스해야합니다

$array1['operation']['result']['status']; 
+0

답장을 보내 주셔서 감사합니다.하지만 "PHP Notice : Undefined index : operation"오류가 발생합니다. – djh123

관련 문제