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 개발을 해보세요!
'💻 자주 쓰는 PHP 함수' 카테고리의 다른 글
[PHP 함수] strtolower() 함수 - 문자열 소문자 변환 (14) | 2025.03.28 |
---|---|
[PHP 함수] json_encode() 함수로 json으로 변환하기 (26) | 2025.03.27 |
[PHP 함수] preg_match() 함수로 패턴 검사하기 (10) | 2025.03.26 |
[PHP 함수] trim() 함수로 공백 제거하기 (4) | 2025.03.26 |
[PHP 함수] is_file() 함수로 파일 확인하기 (10) | 2025.03.25 |