2015-01-08 3 views
1

PHP로 웹 사이트를 만들어야하고 실제로 시도하고 있습니다. 지금은 URL에서 JSON을 얻고 싶습니다 (Node.js가있는 웹 서비스가 있습니다). 화면에 표시하고 싶습니다.PHP json_decode가 객체가 아닌 배열을 반환합니다.

[{"name":"Juan","text":"Oh my god"},{"name":"Pedro","text":"I'm here"}] 

내가 PHP 파일에이 코드를 가지고 :

<?php 
    $data = file_get_contents('http://localhost:3000/node/busca'); // Returns the JSON 
    $terminos = json_decode($data); 

    print_r($terminos); 

    echo $terminos->name; 

?> 

그러나 print_r 반환 :

Array ( 
    [0] => stdClass Object ( 
      [name] => Juan 
      [text] => Oh my god 
     ) 
    [1] => stdClass Object ( 
      [name] => Pedro 
      [text] => I'm here 
     ) 
) 

에코는

을 말한다을 URL은 다음과 같은 JSON 객체를 반환

Notice : C :가 아닌 객체의 속성을 얻으려고합니다. .. \ index.php on line 17

어떻게해야합니까? json_decode은 배열이 아닌 객체를 반환해야합니다.

+1

처음에는'[...]'배열이기 때문입니다. [→ 참조] (http://array.include-once.org/?foreach=&assoc=&json=%5B%7B%22name%22%3A%22Juan%22%2C%22text%22%3A%22Oh+my + 신 22 % 7D % 2C % 7B % 22 이름 % 22 % 3A % 22Pedro % 22 % 2C % 22 % 22 % 3A % 22I % 27m + 여기 % 22 % 7D % 5D) – mario

+0

그리고 어떻게 삭제할 수 있습니까? – BGG

+1

'unset()'아마도? – AbraCadaver

답변

4

JSON과 디코딩 된 PHP는 객체의 배열입니다. 시도 :

echo $terminos[0]->name; 

는 당신은 너무 여러 배열 요소가 있습니다

foreach($terminos as $object) { 
    echo $object->name; 
} 
+0

또는 그는 배열에서 빠져 나와'stdClass' 이후로'$ k-> name;'(foreach로부터'$ k'가 할당되었다고 가정)을 통해 오브젝트에 직접 액세스 할 수 있습니다. –

+0

이 작업 (name, sorry)과 함께 작동하지만 print_r을 사용할 수 없습니까? 나는 말합니다, 어떻게 모든 요소를 ​​보여줄 수 있습니까? – BGG

+0

네, 그렇습니다. 수정되었습니다 ... – AbraCadaver

2

귀하의 데이터 객체의 인코딩 된 배열입니다. 그래서 당신은 일련의 객체들을 얻을 것입니다. 모든 것이 바로 여기에 있습니다. 이는 개별 개체 래핑하는 방법을 매우 명확하고 주소처럼 보면

Array ( 
    [0] => stdClass Object ( 
      [name] => Juan 
      [text] => Oh my god 
     ) 
    [1] => stdClass Object ( 
      [name] => Pedro 
      [text] => I'm here 
     ) 
) 

:

0

mixed json_decode (string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]]) 


$terminosFalse = json_decode($data, true); 
array(2) { 
    [0]=> 
    array(1) { 
    ["attribute"]=> 
    string(1) "attr1" 
    } 
    [1]=> 
    array(1) { 
    ["attribute"]=> 
    string(1) "ATTR2" 
    } 
} 


$terminosTrue = json_decode($data, false); 
array(2) { 
    [0]=> 
    object(stdClass)#1 (1) { 
    ["attribute"]=> 
     string(1) "attr1" 
    } 
    [1]=> 
    object(stdClass)#2 (1) { 
    ["attribute"]=> 
    string(1) "ATTR2" 
    } 
} 
+1

그것은 OP가 원하는 것의 반대이다. – jeroen

1

json_decode가 다시 포맷 배열 출력 OP의 질문에 편집을 참조하십시오 :

foreach ($terminos as $idx => $obj) { 
    echo "Name $idx: " $obj->name . PHP_EOL; 
    /// ... etc 
} 

해야 출력 :

Name 0: Juan 
Name 1: Pedro 
관련 문제