Where The Streets Have No Name

간단한 JSON 인코드 함수 본문

Developement/PHP

간단한 JSON 인코드 함수

highheat 2008. 4. 3. 22:05
출처 :  http://mygony.com/archives/944

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}