PHP에서 데이터를 JSON 형식으로 변환해야 하는 경우가 많습니다.
예를 들어, API 응답 생성, 데이터 저장, AJAX 요청 처리, 데이터 직렬화(Serialization) 등 다양한 작업에서 JSON을 사용합니다.
이러한 기능을 수행하는 대표적인 함수가 바로 json_encode() 입니다.
이 글에서는 PHP json_encode() 함수의 사용법, 다양한 활용 예제, JSON 옵션, json_decode()와의 차이점, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다.
1. json_encode() 함수란?
✅ 기본 문법
string json_encode(mixed $value, int $flags = 0, int $depth = 512)
✅ 매개변수 설명
매개변수 설명
$value | JSON으로 변환할 데이터 (배열, 객체, 숫자, 문자열 등) |
$flags (선택) | JSON 변환 옵션 (JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE 등) |
$depth (선택) | JSON 변환 시 허용할 최대 깊이 (기본값 512) |
✅ 반환값
- 입력된 데이터를 JSON 문자열로 변환하여 반환
- 변환에 실패하면 false 반환
2. json_encode() 기본 예제
🔹 연관 배열을 JSON으로 변환
<?php
$data = ["name" => "Alice", "age" => 25, "city" => "New York"];
$json = json_encode($data);
echo $json;
?>
🔹 실행 결과
{"name":"Alice","age":25,"city":"New York"}
➡ 연관 배열을 JSON 형식으로 변환.
🔹 다차원 배열을 JSON으로 변환
<?php
$data = [
"users" => [
["id" => 1, "name" => "Alice"],
["id" => 2, "name" => "Bob"]
]
];
$json = json_encode($data);
echo $json;
?>
🔹 실행 결과
{"users":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]}
➡ 중첩된 배열도 JSON 변환 가능.
🔹 객체를 JSON으로 변환
<?php
class User {
public $name = "Alice";
public $age = 25;
}
$user = new User();
$json = json_encode($user);
echo $json;
?>
🔹 실행 결과
{"name":"Alice","age":25}
➡ 객체도 JSON 변환 가능.
3. JSON 옵션($flags) 활용
🔹 JSON을 보기 좋게 정렬 (JSON_PRETTY_PRINT)
<?php
$data = ["name" => "Alice", "age" => 25];
$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;
?>
🔹 실행 결과
{
"name": "Alice",
"age": 25
}
➡ 가독성을 높이기 위해 JSON을 정렬하여 출력.
🔹 한글을 유니코드로 변환하지 않음 (JSON_UNESCAPED_UNICODE)
<?php
$data = ["message" => "안녕하세요"];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json;
?>
🔹 실행 결과
{"message":"안녕하세요"}
➡ 기본적으로 "안녕하세요"는 "\ud55c\uae00"로 변환되지만,
➡ JSON_UNESCAPED_UNICODE를 사용하면 그대로 유지.
🔹 여러 옵션을 함께 사용 (| 연산자 활용)
<?php
$data = ["message" => "안녕하세요"];
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $json;
?>
🔹 실행 결과
{
"message": "안녕하세요"
}
➡ 여러 옵션을 조합하여 사용 가능.
PHP json_decode() 함수로 Json을 배열로 변환
PHP json_decode() 함수로 Json을 배열로 변환
PHP에서 JSON 데이터를 PHP 배열 또는 객체로 변환해야 하는 경우가 많습니다.예를 들어, API 응답 처리, JSON 파일 읽기, 데이터 저장 및 로드, AJAX 요청 처리 등에서 JSON을 사용합니다.이러한 기능을
rhandykim.tistory.com
4. json_encode()와 json_decode() 비교
함수 설명
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); // true를 설정하면 연관 배열 반환
print_r($decoded);
?>
🔹 실행 결과
Array
(
[name] => Alice
[age] => 25
)
➡ json_decode()를 사용하면 JSON을 다시 PHP 배열로 변환 가능.
5. json_encode() 사용 시 주의할 점
✅ UTF-8 인코딩 필요
<?php
$data = ["message" => "안녕하세요"];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json;
?>
➡ PHP의 json_encode()는 UTF-8 인코딩이 필요하므로,
➡ 다른 인코딩(EUC-KR) 사용 시 변환(mb_convert_encoding()) 후 처리 필요.
✅ 객체의 private/protected 속성은 변환되지 않음
<?php
class User {
private $name = "Alice";
public $age = 25;
}
$user = new User();
echo json_encode($user);
?>
🔹 실행 결과
{"age":25}
➡ private 속성은 JSON 변환되지 않음.
➡ get_object_vars($object)를 사용하여 해결 가능.
✅ false 반환 시 오류 확인 (json_last_error())
<?php
$data = "\xB1\x31"; // 잘못된 UTF-8
$json = json_encode($data);
if ($json === false) {
echo "JSON 변환 오류: " . json_last_error_msg();
}
?>
➡ UTF-8이 아닌 문자열은 오류 발생 가능.
6. json_encode() 활용 팁
✅ 파일로 JSON 데이터 저장 (file_put_contents())
<?php
$data = ["name" => "Alice", "age" => 25];
file_put_contents("data.json", json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
?>
✅ API 응답(JSON 출력)
<?php
header("Content-Type: application/json");
$data = ["status" => "success", "message" => "API 요청 성공"];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>
✅ 객체 변환 시 jsonSerialize() 사용
<?php
class User implements JsonSerializable {
private $name = "Alice";
public $age = 25;
public function jsonSerialize() {
return ["name" => $this->name, "age" => $this->age];
}
}
$user = new User();
echo json_encode($user);
?>
➡ jsonSerialize()를 구현하면 private 속성도 JSON 변환 가능.
7. 결론
PHP의 json_encode() 함수는 PHP 데이터를 JSON 문자열로 변환하는 필수적인 함수입니다.
이를 활용하면 API 응답 생성, 데이터 저장, AJAX 처리, JSON 파일 저장 등 다양한 작업을 수행할 수 있습니다.
📌 핵심 요약
✔️ json_encode()는 PHP 데이터를 JSON 문자열로 변환
✔️ 한글 깨짐 방지는 JSON_UNESCAPED_UNICODE 사용
✔️ 가독성을 높이려면 JSON_PRETTY_PRINT 추가
✔️ 객체 변환 시 private 속성은 제외되므로 jsonSerialize() 사용
이제 json_encode()를 활용하여 더욱 효율적인 PHP 개발을 해보세요!
'💻 쇼핑몰 자동화 & 웹 개발 가이드' 카테고리의 다른 글
[PHP 입문] PHP란? 웹 개발 초보자를 위한 구조 이해 가이드 (33) | 2025.04.01 |
---|---|
[PHP 함수] preg_replace() 함수로 패턴 치환 (26) | 2025.03.29 |
[PHP 함수] is_file() 함수로 파일 확인하기 (10) | 2025.03.25 |
[PHP 함수] strlen() 함수로 문자열의 길이를 구하기 (34) | 2025.03.22 |
[PHP 함수] file_exists() 함수를 사용하여 파일과 디렉토리 존재 여부 확인하기 (4) | 2025.03.14 |