웹프로그래밍

Global It Leader!!


PHP


 
 

json_decode, json_encode 사용자 정의 함수

페이지 정보

작성자 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 1,295회 작성일 21-08-10 00:35

본문

이번에 올리는 함수는 json_decode 입니다.
물론, json_encode 와 한쌍입니다.

그런데 왜, json_decode 로 제목을 정했냐하면......
제가 더 많이 쓰기 때문입니다.

요새는 ajax 가 일반적인 기술이 되었습니다.
ajax에서 데이타를 주고 받을때 주로 json 을 많이 이용합니다.
json 데이타를 php에서도 바로 받아서 활용할수 있게 만드는 함수가 json_decode 입니다.

어떻게 보면 내용은 변수를 일렬화 시키고 복구 한다는 차원에서는
serialize, unserialize 와 비슷합니다.

그러나, 일반적인 방법으로 자바스크립트와 같이 동시에 쓸수 있다는 점이 다릅니다.

{"title":"\uc544\ub984\ub2e4\uc6b4 \uc6b0\ub9ac\ub098\ub77c","content":"\uc5b4\uca4c\uad6c \uc800\uca4c\uad6c......"}
 
이런 데이타가 저장된 a.txt 라는 파일이 있다면

$text = file_get_contents('a.txt');
$a = json_decode($text);
print_r($a);
 
stdClass Object
(
    [title] => 아름다운 우리나라
    [content] => 어쩌구 저쩌구......
)

와 같이 반환 됩니다.

보시면 알겟지만 stdClass Object
이렇게 되어있습니다. 즉, 객체로 반환됩니다.

참고로 알아야 할 사항은
json_encode 나 json_decode 나 데이타는 모두 utf-8 형태이어야 합니다.


포탈의 서비스 중
공개된 json 데이타는 이함수를 통해서 얼마든지 이용할수 있습니다.



----------------------------

//json_encode 
if(!function_exists('json_encode')){ 

    function json_encode($a=false){ 

        if(is_null($a)) return 'null'; 
        if($a === false) return 'false'; 
        if($a === true) return 'true'; 
        if(is_scalar($a)){ 

            if(is_float($a)) return floatval(str_replace(",", ".", strval($a))); 
            if(is_string($a)){ 

                static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); 
                return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"'; 
            } 
            else return $a; 
        } 

        $isList = true; 
        for($i=0, reset($a); $i<count($a); $i++, next($a)){ 

            if(key($a) !== $i){ 

                $isList = false; 
                break; 
            } 
        } 
        $result = array(); 
        if($isList){ 

            foreach($a as $v) $result[] = json_encode($v); 
            return '[' . join(',', $result) . ']'; 
        } 
        else{ 

            foreach($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v); 

            return '{' . join(',', $result) . '}'; 
        } 
    } 




if (!function_exists('json_decode')){ 

    function json_decode($json) { 

        $comment = false; 
        $out = '$x='; 

        for ($i=0; $i<strlen($json); $i++)  { 

            if (!$comment) { 

                if ($json[$i] == '{') $out .= ' array('; 
                else if ($json[$i] == '}') $out .= ')'; 
                else if ($json[$i] == ':') $out .= '=>'; 
                else $out .= $json[$i]; 
            } 
            else { 

                $out .= $json[$i]; 
            } 

            if ($json[$i] == '"') $comment = !$comment; 
        } 

        eval($out . ';'); 

        return $x; 
    } 
}
 


사족 : php 5.2 이상 버전에서는 자체 지원되므로 불필요한 함수입니다.

지금은 업그레이드 했지만 그 이유가 이놈의 함수 때문입니다.ㅠㅠ

댓글목록

등록된 댓글이 없습니다.

전체 80
게시물 검색
PHP 목록
번호 제목 글쓴이 조회 날짜
80 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 764 03-29
79 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1092 03-26
78 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 767 03-26
77 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 772 03-17
76 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1091 11-28
75 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1443 08-11
열람중 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1296 08-10
73 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1586 08-02
72 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1597 07-20
71 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1320 07-05
70 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1433 05-27
69 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2012 03-30
68 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1609 03-30
67 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1558 03-29
66 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1577 03-27
65 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1803 03-10
64 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1942 02-24
63 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1633 02-22
62 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2253 12-31
61 no_profile 운영자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1869 10-30