`json_encode`가 희소 PHP 배열을 JSON 개체로 변환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-21 07:53:08
원래의
688명이 탐색했습니다.

Why Does `json_encode` Convert Sparse PHP Arrays to JSON Objects?

json_encode에서 JSON 개체로 인코딩된 희소 배열

배열에 누락된 인덱스가 포함되어 있는 경우 이를 희소 배열이라고 합니다. json_encode는 기본적으로 희소 배열을 배열 대신 JSON 객체로 처리합니다. 이로 인해 다양한 시나리오에서 예상치 못한 동작이 발생할 수 있습니다.

배열-객체 변환 원인

JSON 구문은 인덱스가 누락된 배열을 지원하지 않습니다. json_encode는 희소 배열을 발견하면 이를 객체로 가정하고 그에 따라 변환합니다.

다음을 고려하세요. 코드:

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

// First JSON encoding
echo json_encode($a) . "\n";

// Unset an element
unset($a[1]);

// Second JSON encoding
echo json_encode($a) . "\n";
로그인 후 복사

출력

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
로그인 후 복사

첫 번째 인코딩에서는 배열이 예상대로 JSON 배열로 변환됩니다. 그러나 인덱스 1을 설정 해제한 후 두 번째 인코딩에서는 희소 배열 문제로 인해 JSON 개체가 생성됩니다.

예방

이러한 동작을 방지하고 일관된 배열 인코딩을 보장하려면 , json_encode에 전달하기 전에 array_values()를 사용하여 배열을 다시 색인화할 수 있습니다. 이렇게 하면 배열의 구멍이 제거되고 json_encode에 의해 배열로 처리됩니다.

수정된 코드

echo json_encode(array_values($a)) . "\n";
로그인 후 복사

이 수정된 코드는 항상 $a를 다음과 같이 인코딩합니다. 누락된 인덱스가 있는지 여부에 관계없이 JSON 배열입니다.

위 내용은 `json_encode`가 희소 PHP 배열을 JSON 개체로 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿