이 작은 스크립트를 관찰하십시오.
$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 배열로 디코딩됩니다.
참조 :
- RFC 4627-JavaScript 개체에 대한 애플리케이션 / json 미디어 유형
- RFC 7159-JSON (JavaScript Object Notation) 데이터 교환
- 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이 작성했습니다.