PHP

NOTHING NEW

 

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,

 

about author

PHRASE

Level 1  머나먼나라

댓글 ( 4)

댓글 남기기

작성