티스토리 뷰

Web/PHP

[PHP-JSON]PHP JSON 파싱

gray.yoon 2012. 10. 23. 11:51

이번 포스팅에서는 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 파싱 포스팅을 마치겠다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함