💻 쇼핑몰 자동화 & 웹 개발 가이드

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

rhandy 2025. 3. 27. 17:57

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 개발을 해보세요!