💻 자주 쓰는 PHP 함수

[PHP 함수] json_decode() 함수로 Json을 배열로 변환

rhandy 2025. 3. 27. 11:57
728x90

PHP에서 JSON 데이터를 PHP 배열 또는 객체로 변환해야 하는 경우가 많습니다.
예를 들어, API 응답 처리, JSON 파일 읽기, 데이터 저장 및 로드, AJAX 요청 처리 등에서 JSON을 사용합니다.

이러한 기능을 수행하는 대표적인 함수가 바로 json_decode() 입니다.

이 글에서는 PHP json_decode() 함수의 사용법, 다양한 활용 예제, json_encode()와의 차이점, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다. 🚀

 


1. json_decode() 함수란?

기본 문법

mixed json_decode(string $json, bool $associative = false, int $depth = 512, int $flags = 0)

매개변수 설명

매개변수 설명

$json 변환할 JSON 문자열
$associative (선택) true이면 연관 배열 반환, false이면 객체 반환 (기본값 false)
$depth (선택) JSON을 변환할 최대 깊이 (기본값 512)
$flags (선택) JSON 처리 옵션 (JSON_BIGINT_AS_STRING 등)

반환값

  • JSON 문자열을 PHP 배열 또는 객체로 변환
  • JSON 형식이 잘못되었으면 null 반환

2. json_decode() 기본 예제

🔹 JSON을 객체로 변환 ($associative = false, 기본값)

<?php
$json = '{"name": "Alice", "age": 25}';
$data = json_decode($json);

echo $data->name; // Alice
echo $data->age;  // 25
?>

객체로 변환되어 $data->name, $data->age로 접근 가능.


🔹 JSON을 연관 배열로 변환 ($associative = true)

<?php
$json = '{"name": "Alice", "age": 25}';
$data = json_decode($json, true);

echo $data["name"]; // Alice
echo $data["age"];  // 25
?>

연관 배열로 변환되어 $data["name"], $data["age"]로 접근 가능.


🔹 다차원 JSON 변환

<?php
$json = '{"user": {"name": "Alice", "age": 25}}';
$data = json_decode($json, true);

echo $data["user"]["name"]; // Alice
?>

중첩된 JSON도 배열/객체로 변환 가능.


🔹 JSON 배열 변환

<?php
$json = '[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]';
$data = json_decode($json, true);

foreach ($data as $user) {
    echo $user["name"] . "\n";
}
?>

🔹 실행 결과

Alice
Bob

JSON 배열이 PHP 배열로 변환됨.


3. JSON 파일 읽기 및 변환

🔹 file_get_contents()와 함께 사용

<?php
$json = file_get_contents("data.json");
$data = json_decode($json, true);

print_r($data);
?>

파일에서 JSON을 읽어 PHP 배열로 변환.


PHP json_encode() 함수로 json으로 변환하기

 

PHP json_encode() 함수로 json으로 변환하기

PHP에서 데이터를 JSON 형식으로 변환해야 하는 경우가 많습니다.예를 들어, API 응답 생성, 데이터 저장, AJAX 요청 처리, 데이터 직렬화(Serialization) 등 다양한 작업에서 JSON을 사용합니다.이러한 기

rhandykim.tistory.com

 

4. json_decode()와 json_encode() 비교

함수 설명

json_encode() PHP 데이터를 JSON 문자열로 변환
json_decode() JSON 문자열을 PHP 배열 또는 객체로 변환

예제: json_encode() → json_decode() 변환

<?php
$data = ["name" => "Alice", "age" => 25];
$json = json_encode($data);
$decoded = json_decode($json, true);

print_r($decoded);
?>

🔹 실행 결과

Array
(
    [name] => Alice
    [age] => 25
)

PHP 배열 → JSON → 다시 PHP 배열로 변환 가능.


5. json_decode() 사용 시 주의할 점

잘못된 JSON은 null 반환 (json_last_error())

<?php
$json = '{"name": "Alice", "age":}'; // 잘못된 JSON
$data = json_decode($json);

if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON 오류: " . json_last_error_msg();
}
?>

➡ JSON 형식이 잘못되면 null 반환하며, json_last_error_msg()로 오류 확인 가능.

대형 숫자(BigInt)는 문자열로 변환 (JSON_BIGINT_AS_STRING)

<?php
$json = '{"bigNumber": 9223372036854775807}';
$data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);

echo $data["bigNumber"]; // "9223372036854775807"
?>

➡ 기본적으로 PHP는 큰 정수를 부동소수점(float)으로 변환할 수 있으므로,
➡ JSON_BIGINT_AS_STRING 옵션을 사용하면 문자열로 안전하게 변환 가능.

UTF-8이 아닌 JSON은 null 반환 (변환 필요)

<?php
$json = mb_convert_encoding('{"message": "안녕하세요"}', "UTF-8");
$data = json_decode($json, true);
?>

➡ JSON 데이터는 반드시 UTF-8 인코딩이어야 함.


6. json_decode() 활용 팁

API 응답 처리

https://api.example.com/data");
$data = json_decode($response, true);

if ($data) {
    echo "API 호출 성공!";
} else {
    echo "API 호출 실패!";
}
?>

객체 반환 후 접근 (stdClass 사용)

<?php
$json = '{"name": "Alice", "age": 25}';
$data = json_decode($json); // 객체 반환

echo $data->name; // Alice
?>

객체를 특정 클래스 인스턴스로 변환

<?php
class User {
    public $name;
    public $age;
}

$json = '{"name": "Alice", "age": 25}';
$data = json_decode($json);
$user = new User();
$user->name = $data->name;
$user->age = $data->age;

print_r($user);
?>

JSON을 특정 클래스로 변환 가능.

JSON이 비어 있으면 기본값 설정

<?php
$json = '{}';
$data = json_decode($json, true) ?: ["name" => "Guest"];
print_r($data);
?>

➡ ?: 연산자를 사용하면 빈 JSON 처리 가능.

배열이 아닐 경우 예외 처리

<?php
$json = '{"message": "Hello"}';
$data = json_decode($json, true);

if (!is_array($data)) {
    echo "JSON 변환 실패!";
}
?>

배열이 아닐 경우 is_array()로 확인.


7. 결론

PHP의 json_decode() 함수는 JSON을 PHP 배열 또는 객체로 변환하는 필수적인 함수입니다.
이를 활용하면 API 응답 처리, JSON 파일 읽기, 데이터 변환, AJAX 처리 등 다양한 작업을 수행할 수 있습니다.

📌 핵심 요약
✔️ json_decode()는 JSON을 PHP 배열 또는 객체로 변환
✔️ $associative = true 설정 시 연관 배열 반환
✔️ JSON이 잘못되면 null 반환 (json_last_error_msg()로 확인 가능)
✔️ UTF-8 인코딩이 필요
✔️ 큰 정수(BigInt)는 JSON_BIGINT_AS_STRING 옵션 사용

이제 json_decode()를 활용하여 더욱 효율적인 PHP 개발을 해보세요!

728x90