티스토리 뷰
이번 포스팅에서는 PHP에서 JSON을 파싱하는 부분을 설명하고자 한다.
$Res["Data"] 라는 변수는 Json String인 데이터이다.
이 데이터를 Array로 변경하기 위해 아래의 함수를 사용한다.
ex ) $Data = objectToArray(jsondecode($Res["Data"]));
/**********************************************************
* *
* JSON을 Array로 만들 때 쓰는 Function *
* 해당 Function은 서버가 euc-kr일 경우 사용. *
* 만약 서버가 UTF-8인 경우 php version 5.2.1 이상이면, *
* 지원하는 함수가 있음 *
* *
**********************************************************/
//JSON Decode, Encode euc-kr용 function ToEucKr( $val ){ return iconv("UTF-8","euc-kr//IGNORE",$val ); } function ToUTF8( $val ){ return iconv("euc-kr","UTF-8",$val ); } //euc-kr용 function jsonencode($val) { $tmp = obj_change_charset($val, 'utf-8', true); $tmp = json_encode( $tmp ); return $tmp; } //euc-kr용 function jsondecode($val) { $tmp = obj_change_charset($val, 'utf-8', true); $tmp = json_decode( $tmp ); obj_change_charset( $tmp, 'euc-kr' ); return $tmp; } function obj_change_charset( &$obj, $tocharset='utf-8', $clone=false ) { $obj_tmp = NULL; if ($clone) { $obj_tmp = is_object($obj) ? clone $obj : $obj; }else{ $obj_tmp =& $obj; } switch ( gettype($obj_tmp) ) { case 'string' : if ('euc-kr'==$tocharset) { $obj_tmp = ToEucKr($obj_tmp); }else{ $obj_tmp = ToUTF8($obj_tmp); } break; case 'array': foreach ($obj_tmp as &$val) { $val = obj_change_charset( $val, $tocharset, $clone ); } break; case 'object': $object_vars = get_object_vars( $obj_tmp ); foreach ($object_vars as $key=>$val) { $obj_tmp->$key = obj_change_charset( $val, $tocharset, $clone ); } break; } return $obj_tmp; } /////////////////////////////////////////////////////////////////////////// /************************************************************** * * * objectToArray : * * stdClass Type의 배열을 Array배열로 Convert 하는 함수 * * * * arrayToObject : * * Array 배열을 stdClass Type 배열로 Convert 하는 함수 * * * ***************************************************************/ /* 개발을 하다보면 배열을 자주 다루게 되는데 .. 배열이 아닌것이 배열처럼 보여서 작업할때 헥갈리는 경우가 있다. 그게 바로 stdClass 때문인데.. stdClass = 문자열인덱스 배열 구조라고 한다. (자세한건 잘 모르겠음 ㅡㅡ;) 예) a -> val = "value"; 이렇게 선언하면 a 는 stdClass 타입의 클래스가 된다고 함. --------------------------------------------------------------------------- stdClass 는 Json 을 사용할때도 사용 되기도 한다. 스크립트에서 ajax 사용시 넘기는 데이터 타입을 json 으로 지정하면 넘어가는 데이터가 stdClass로 넘어간다. 이럴경우 일반 배열로 다시 변환 하고 싶다면... json_decode($aa,true); 로 선언하면 된다. */ // stdClass -> Array Convert function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); } if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } } function arrayToObject($d) { if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return (object) array_map(__FUNCTION__, $d); } else { // Return object return $d; } } ?>
이상으로 EUC-KR환경에서 PHP JSON 파싱 포스팅을 마치겠다.
'Web > PHP' 카테고리의 다른 글
[PHP]Form action Charset (0) | 2012.11.23 |
---|---|
[PHP - JSON] PHP-JSON 사용시 한글 encode-decode 구현하기 (0) | 2012.11.07 |
[PHP-Ajax]PHP에서 Ajax사용 (EUC-KR일 경우) (0) | 2012.10.23 |