[php] json_encode / json_decode-PHP에서 Array 대신 stdClass 반환

이 작은 스크립트를 관찰하십시오.

$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )

PHP가 JSON 객체를 클래스로 바꾸는 이유는 무엇입니까?

json_encoded그런 다음 json_decoded정확히 동일한 결과 를 산출 하는 배열이 안 됩니까?



답변

https://secure.php.net/json_decodejson_decode($json, $assoc, $depth) 에서 두 번째 매개 변수를 자세히 살펴보십시오.


답변

$arrayDecoded = json_decode($arrayEncoded, true);

배열을 제공합니다.


답변

실제 질문에 답하려면 :

PHP가 JSON 객체를 클래스로 바꾸는 이유는 무엇입니까?

인코딩 된 JSON의 출력을 자세히 살펴보면 OP가 제공하는 예제를 확장했습니다.

$array = array(
    'stuff' => 'things',
    'things' => array(
        'controller', 'playing card', 'newspaper', 'sand paper', 'monitor', 'tree'
    )
);
$arrayEncoded = json_encode($array);
echo $arrayEncoded;
//prints - {"stuff":"things","things":["controller","playing card","newspaper","sand paper","monitor","tree"]}

JSON 형식은 JavaScript ( ECMAScript Programming Language Standard )와 동일한 표준에서 파생되었으며 형식을 살펴보면 JavaScript처럼 보입니다. 이것은 값이 “things”인 “stuff”속성을 갖는 JSON 객체 ( {}= object )이며 값이 문자열 []배열 ( = array ) 인 “things”속성을가 집니다.

JSON (JavaScript)은 연관 배열 만 인덱싱 된 배열을 알지 못합니다. 따라서 JSON이 PHP 연관 배열을 인코딩 할 때이 배열을 “객체”로 포함하는 JSON 문자열이 생성됩니다.

이제 .NET을 사용하여 JSON을 다시 디코딩합니다 json_decode($arrayEncoded). 디코드 함수는이 JSON 문자열의 출처 (PHP 배열)를 알지 못하므로 PHP에있는 알 수없는 개체로 디코딩 stdClass합니다. 보시다시피 문자열의 “things”배열은 색인 된 PHP 배열로 디코딩됩니다.

참조 :


‘사물’에 대한 https://www.randomlists.com/things 덕분에


답변

언급했듯이 여기에 두 번째 매개 변수를 추가하여 배열을 반환 할 것을 나타낼 수 있습니다.

$array = json_decode($json, true);

많은 사람들이 대신 결과를 캐스팅하는 것을 선호 할 수 있습니다.

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

읽기가 더 명확 할 수 있습니다.


답변

tl; dr : JavaScript는 연관 배열을 지원하지 않으므로 JSON도 지원하지 않습니다.

결국 JSAAN이 아니라 JSON입니다. 🙂

따라서 PHP는 JSON으로 인코딩하기 위해 배열을 객체로 변환해야합니다.


답변

    var_dump(json_decode('{"0":0}'));    // output: object(0=>0)
    var_dump(json_decode('[0]'));          //output: [0]

    var_dump(json_decode('{"0":0}', true));//output: [0]
    var_dump(json_decode('[0]', true));    //output: [0]

json을 배열로 디코딩하면이 상황에서 정보가 손실됩니다.


답변

또한 PHP4에서 json_encode () 및 json_decode () 사용 (2009 년 6 월) 블로그 게시물에 작성된 좋은 PHP 4 json 인코딩 / 디코드 라이브러리 (즉, PHP 5 역 호환 가능 )도 있습니다.

구체적인 코드는 Michal Migurski와 Matt Knapp이 작성했습니다.