[php] stdClass 유형의 객체를 배열로 사용할 수 없습니까?

를 사용하여 이상한 오류가 발생 json_decode()합니다. 데이터를 올바르게 디코딩 print_r하지만 (을 사용하여 보았습니다 ), 배열 내부의 정보에 액세스하려고하면 다음과 같은 결과가 나타납니다.

Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108

나는 단지 시도했다 : $result['context']어디서 $result데이터를 반환 했는가json_decode()

이 배열 내부의 값을 어떻게 읽을 수 있습니까?



답변

의 두 번째 매개 변수를 사용하여 json_decode배열을 리턴하십시오.

$result = json_decode($data, true);


답변

이 함수 json_decode()는 기본적으로 객체를 반환합니다.

다음과 같은 데이터에 액세스 할 수 있습니다.

var_dump($result->context);

다음과 같은 식별자가있는 경우 from-date(위의 방법을 사용할 때 하이픈으로 인해 PHP 오류가 발생 함) 다음과 같이 작성해야합니다.

var_dump($result->{'from-date'});

배열을 원하면 다음과 같이 할 수 있습니다.

$result = json_decode($json, true);

또는 객체를 배열로 캐스트하십시오.

$result = (array) json_decode($json);


답변

->객체이므로 이를 사용하여 액세스해야 합니다.

다음에서 코드를 변경하십시오.

$result['context'];

에:

$result->context;


답변

오늘 같은 문제가 다음과 같이 해결되었습니다.

당신이 전화 json_decode($somestring)하면 당신은 객체를 얻을 것이고 당신은 같은에 액세스해야 $object->key하지만, u 전화 json_decode($somestring, true)하면 당신은 사전을 얻고 다음과 같이 액세스 할 수 있습니다$array['key']


답변

true의 두 번째 매개 변수로 사용하십시오 json_decode. 이것은 stdObject인스턴스 대신 json을 연관 배열로 디코딩합니다 .

$my_array = json_decode($my_json, true);

자세한 내용 은 설명서 를 참조하십시오.


답변

배열이 아니며 stdClass 유형의 객체입니다.

다음과 같이 액세스 할 수 있습니다.

echo $oResult->context;

자세한 정보는 여기에 있습니다 : PHP의 stdClass 란 무엇입니까?


답변

Php 매뉴얼에서 말한 것처럼

print_r — 변수에 대한 사람이 읽을 수있는 정보를 인쇄합니다

를 사용할 때 json_decode();stdClass 유형의 객체를 반환 유형으로 얻습니다. 내부로 전달되는 인수 print_r()는 배열 또는 문자열이어야합니다. 따라서 내부에 객체를 전달할 수 없습니다 print_r(). 나는 이것을 다루는 두 가지 방법을 발견했다.

  1. 객체를 배열로 캐스트합니다.
    이것은 다음과 같이 달성 될 수 있습니다.

    $a = (array)$object;
  2. Object의 키에 액세스하여
    앞에서 언급했듯이 json_decode();함수 를 사용할 때 stdClass의 Object를 반환합니다. ->Operator 의 도움으로 객체의 요소에 액세스 할 수 있습니다 .

    $value = $object->key;

하나는 객체에 중첩 배열이있는 경우 여러 키를 사용하여 하위 요소를 추출 할 수도 있습니다.

$value = $object->key1->key2->key3...;

그들의 다른 옵션은 print_r()물론, 같은 var_dump();var_export();

추신 : 당신이의 두 번째 매개 변수를 설정하는 경우 또한, json_decode();위해 true, 그것은 자동으로 개체를 변환 할 array();
몇 가지 참조입니다 :
http://php.net/manual/en/function.print-r.php
에 http : // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php