[PHP] 간단한 json_encode 함수

Ajax로 밥먹고 살다보니 XML을 다루어야 할 일이 생긴다. 그런데, XMLHTTPRequest 돌려받은 XML을 브라우저마다 조금 미묘하게 틀리게 다루다보니 이만저만 성가신게 아니다. 그래서 언젠가부터 JSON을 애용하고 있는데, 안타깝게도 PHP에서는 버전이 5.2.0 이상이 되어야 기본으로 설치가 되어있다. PECL 이나 PEAR 등에서 설치하면 되긴 하지만, 설치보다 Copy&Paste를 선호하시는 분들을 위해 만들어보았다.

function json_encode2($data) {
    switch (gettype($data)) {
        case 'boolean':
            return $data?'true':'false';
        case 'integer':
        case 'double':
            return $data;
        case 'string':
            return '"'.strtr($data, array('\\'=>'\\\\','"'=>'\\"')).'"';
        case 'array':
            $rel = false; // relative array?
            $key = array_keys($data);
            foreach ($key as $v) {
                if (!is_int($v)) {
                    $rel = true;
                    break;
                }
            }

            $arr = array();
            foreach ($data as $k=>$v) {
                $arr[] = ($rel?'"'.strtr($k, array('\\'=>'\\\\','"'=>'\\"')).'":':'').json_encode2($v);
            }

            return $rel?'{'.join(',', $arr).'}':'['.join(',', $arr).']';
        default:
            return '""';
    }
}

아래는 대충 만든 예제이다.

$data2 = array(0,1,2,3,array('beskin'=>'31'));

$data = array(
    'test'=>'test data',
    'sample'=>'sample string',
    'data2'=>$data2,
    'bool'=>true,
    'number_data'=>33282,
    'pi'=>3.14
);

echo '## json_encode';
echo json_encode($data);

echo '## json_encode2';
echo json_encode2($data);

원래 있는 json_encode 함수와의 비교를 위해 함수 이름을 json_encode2로 작성하였다.

## json_encode
{"test":"test data","sample":"sample string","data2":[0,1,2,3,{"beskin":"31"}],"bool":true,"number_data":33282,"pi":3.14}

## json_encode2
{"test":"test data","sample":"sample string","data2":[0,1,2,3,{"beskin":"31"}],"bool":true,"number_data":33282,"pi":3.14}
  1. ‘asam’,
    ‘memo’ => “안녕하세요. 고니님n 새해 복 많이 받으세요.”
    );
    ?>

    var msg = ;
    alert(msg.memo);

    줄바꿈 때문에 에러가 나는 것 같습니다.

  2. 필요해서 쓰게 되었는데.. 좋네요..
    php 버전이라는게 항상 정해진게 아니라서. 날코딩이 필요할때가 많네요.

댓글을 남겨주세요