본문 바로가기
IT/web

[PHP] json_encode 설명과 예제

by 어느해겨울 2021. 12. 27.

 

json_encode

- data를 json string 으로 변환한다. array, object to json string.

  아래는 array 를 json string 으로 encode 하는 예제이다.

<?php
    $arr_data = array();
    $arr_data["name"] = "muabow";
    $arr_data["url"]  = "https://muabow.tistory.com";
    $arr_data["desc"] = "한글과 공백";
    
    var_dump(json_encode($arr_data));
?>
string(95) "{"name":"muabow","url":"https:\/\/muabow.tistory.com","desc":"\ud55c\uae00\uacfc \uacf5\ubc31"}"

string으로 변환된 것을 확인 할 수있지만 역슬러시(\)가 포함되고 한글은 유니코드로 변경된 것을 확인할 수 있다.

특히 가장 중요한 출력 포맷을 지키지 않고 한줄로 string화 하여 출력되는데 우리는 이러한 문제를 encode flag 를 통해 해결할 수 있다.

 

json_eoncde 포맷

json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false

 

flag 목록 중 많이 사용하는 것만 모아본다.

- flag 는 | 를 통하여 복수개를 사용 가능하다. (e.g. JSON_PRETTY_PRINT | JSON_FORCE_OBJECT)

Flag 목록 설명
 JSON_FORCE_OBJECT  array를 강제로 object 형태로 변환한다.
 JSON_HEX_QUOT  double quotaion(") 을 유니코드 \u0027로 인코딩한다. 
 JSON_HEX_APOS  single quotation(')을 유니코드 \u0022로 인코딩 한다.
 JSON_PRETTY_PRINT  JSON 포맷으로 indentation 하여 출력한다.
 JSON_UNESCAPED_SLASHES  슬러시를 표현할 떄 역슬러시(\)를 추가하지 않는다.
 JSON_UNESCAPED_UNICODE  유니코드 문자로 변환하지 않는다.

 

그럼 처음 예제를 원하는데로 변경하기 위해선 다음과 같은 옵션이 필요하다.

1. JSON_PRETTY_PRINT

2. JSON_UNESCAPED_UNICODE

3. JSON_UNESCAPED_SLASHES

 

<?php
    $arr_data = array();
    $arr_data["name"] = "muabow";
    $arr_data["url"]  = "https://muabow.tistory.com";
    $arr_data["desc"] = "한글과 공백";
    
    var_dump(json_encode($arr_data, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));
?>
string(97) "{
    "name": "muabow",
    "url": "https://muabow.tistory.com",
    "desc": "한글과 공백"
}"

결과를 확인하면 url의 슬러시, 한글, 공백 등 JSON 포맷을 맞춰 출력되는 것을 볼 수 있다.

 

 

댓글