JSON을 PHP 배열로 변환

JSON 문서를 붙여넣으면 .php 소스 파일에 맞게 서식이 지정된 PHP 배열 리터럴을 얻을 수 있습니다. 짧은 배열 문법([...]), 올바른 들여쓰기, 정확하게 따옴표로 감싼 문자열, 연관 배열로 변환되는 중첩 객체, 그리고 인덱스를 유지하는 배열이 특징입니다. 테스트에 API 픽스처를 삽입하거나 설정 파일의 초깃값을 채우는 데 유용합니다.

JSON을 PHP로 변환하는 방법

  1. 1

    JSON 붙여넣기

    유효한 모든 JSON: 객체, 배열, 깊이 중첩된 구조 포함.

  2. 2

    문법 선택

    짧은 `[...]`(PHP 5.4 이상) 또는 긴 `array(...)`(지금은 거의 필요 없음).

  3. 3

    문자열 따옴표 선택

    작은따옴표(변수 보간 없음, 아포스트로피는 이스케이프) 또는 큰따옴표(`$` 보간 허용: 데이터에는 대개 부적합).

  4. 4

    배열 복사

    `.php` 파일에 붙여넣고 `return`에 할당하거나 `config([...])`로 감싸세요.

예시

입력:

{ "app": { "name": "Hyperion", "debug": true, "hosts": ["h1.example.com", "h2.example.com"] } }

출력(짧은 문법, 작은따옴표):

[
    'app' => [
        'name' => 'Hyperion',
        'debug' => true,
        'hosts' => [
            'h1.example.com',
            'h2.example.com',
        ],
    ],
]

타입 매핑

JSON PHP
문자열 문자열(작은따옴표)
정수 int
숫자(소수) float
불리언 true / false
null null
배열(JSON) 인덱스 배열
객체(JSON) 연관 배열

연관 배열과 인덱스 배열을 언제 사용할까

PHP에는 두 가지 동작을 모두 가진 하나의 배열 타입이 있습니다. 반면 JSON은 객체와 배열을 명확히 구분하므로 매핑은 다음과 같습니다.

  • {} → 연관 배열(['key' => value]).
  • [] → 인덱스 배열([value, value]).

제너레이터는 항상 이 구분을 유지합니다. PHP에서 둘을 섞는 것은 가능하지만 혼란스럽습니다.

PHP 특유의 함정

  • 숫자 문자열 키. PHP는 배열에서 "42"를 정수 키 42로 변환합니다. JSON에서 숫자 문자열을 키로 사용하면서 문자열로 유지해야 한다면, array_combine을 통한 왕복 변환에서는 보존되지 않습니다.
  • 큰 정수. JSON은 32비트 빌드에서 PHP_INT_MAX보다 큰 정수를 담을 수 있습니다. 그런 상황이 발생할 수 있으면 제너레이터가 경고합니다.
  • UTF-8. PHP 문자열은 바이트 시퀀스이며, 제너레이터는 UTF-8을 그대로 출력합니다. .php 파일이 BOM 없는 UTF-8로 저장되었는지 확인하세요.

사용 사례

  • 설정 파일. Laravel과 Symfony 모두 PHP 배열 설정을 사용합니다. 벤더 스타일의 JSON 설정을 그대로 가져오는 방식도 잘 동작합니다.
  • 테스트 픽스처. PHPUnit 픽스처는 런타임에 로드되는 JSON 파일보다 배열 형태가 더 깔끔합니다.
  • 시더. Laravel의 데이터베이스 시더는 흔히 JSON 덤프에서 시작해 PHP 배열이 됩니다.

흔한 실수

  • PHP 배열을 다시 JSON으로 변환하기. json_encode는 연관 배열을 객체로, 인덱스 배열을 배열로 취급합니다. 둘을 섞으면(['key' => 'val', 0 => 'x']) 출력이 객체가 됩니다. JSON 형태의 배열은 JSON 형태로 유지하세요.
  • 아포스트로피가 있는 큰따옴표. 작은따옴표 PHP 문자열은 \'를 이스케이프해야 하고, 큰따옴표 문자열은 \\"를 이스케이프해야 하며, 주의하지 않으면 변수가 실수로 보간될 수 있습니다. 데이터에는 작은따옴표를 사용하세요.
  • 끝의 쉼표 잊기. PHP는 7.3부터 이를 허용하며 diff를 더 깔끔하게 만듭니다. 제너레이터는 기본적으로 추가합니다.

자주 묻는 질문

짧은 문법([...])은 PHP 5.4부터 사용할 수 있으며 모든 현대 코드에서 관용적인 선택입니다. 긴 문법(array(...))은 PHP 5.3 이하에서 실행해야 하는 코드, 즉 사실상 레거시 시스템에서만 필요합니다.

네. Laravel 설정 파일은 파일에서 반환되는 평범한 PHP 배열입니다. 제너레이터 출력을 return 뒤에 붙여넣고 config/에 저장하세요.

작은따옴표 PHP 문자열은 변수나 이스케이프 시퀀스를 보간하지 않습니다(\'\\ 제외). 데이터 리터럴에는 이 방식이 더 빠르고 안전합니다. 큰따옴표는 문자열 안에 \n, \t, $variable을 넣고 싶을 때만 의미가 있습니다.

아니요, 배열 리터럴을 출력합니다. 필요에 따라 return, const, 클래스 속성으로 직접 감싸세요. 출력을 작게 유지하면 조합하기 쉬워집니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다