유

유용한 함수 - json_decode

· 2011-11-11 (금) 10:49:18 · 4643 · 14
안녕하세요 유창화입니다.

이번에 올리는 함수는 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 데이타는 이함수를 통해서 얼마든지 이용할수 있습니다.




|

댓글 14개

하루에 하나씩 올리신후 ... 책 쓰시면 되겠네요.
포인트경매에 협찬 좀 굽슨굽슨 (__)
ㅎㅎ 네...
고맙습니다.
추천했사옵나이다~~~~~~~
감사합니다~~~~~~
오늘은 더 점수 안올라간답니다. ㅠㅠ
2011-11-11 (금) 11:23:47
외람된 질문이지만,, php 5.2 이상에서만 사용가능한 함수라고 본것같아서요..
5.2이상에서만 사용가능한건가요..?!
그렇다면.. 혹.. 그 이하 버전에는 개인적으로 쓰려고 만들어둔 함수가 혹시 있나 싶어서요..ㅋ
저도 추천 드려요!ㅋ
//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;
}
}
2011-11-11 (금) 11:46:37
감사합니다. 참고해서 유용하게 사용하겠습니다.
만약 에러나면
static
은 지워도 됩니다.
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] == '{') || ($json[$i] == '['))
$out .= ' array(';
else if (($json[$i] == '}') || ($json[$i] == ']'))
$out .= ')';
else if ($json[$i] == ':')
$out .= '=>';
else
$out .= $json[$i];
}
else {

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

if ($json[$i] == '"' && $json[($i-1)]!="\\") $comment = !$comment;
}
eval($out . ';');

return $x;
}
}

이게 더 정확한듯 합니다.
추천합니다.
\uc544\ub984\ub2e4\uc6b4 \uc6b0\ub9ac\ub098\ub77c이런 것은 무슨 암호화인가요?
써제스트하면서 json을 자세히 보았는데 {"id": "아이디", "value": "값", "info": "설명"} 처럼 암호화 없이 바로 쓰더라구요.
암호화 아니구요.
utf-8 문자열임을 뜻합니다.

같이 써도 상관없는데, 데이타가 utf-8이기만 하면 됩니다.
감사합니다~ 그런것이였군요 ㅎㅎ
json_encode 를 평소에 많이 사용했었는데요. json_decode 도 좋네요.
좋은 정보 감사합니다.
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
12-03-19 조회 3,457
12-03-16 조회 4,023
12-03-14 조회 3,900
12-03-13 조회 3,521
12-03-13 조회 4,392
12-03-12 조회 5,436
12-03-12 조회 1만
12-03-08 조회 6,013
12-03-06 조회 1.1만
12-03-06 조회 3,699
12-03-06 조회 6,232
12-03-02 조회 5,002
12-02-29 조회 3,569
12-02-27 조회 4,048
12-02-22 조회 3,628
12-02-20 조회 3,608
12-02-20 조회 6,708
12-02-01 조회 3,222
12-01-30 조회 8,746
12-01-29 조회 3,242
12-01-24 조회 3,449
12-01-21 조회 3,203
12-01-10 조회 3,675
11-12-26 조회 3,565
11-12-23 조회 4,990
11-12-23 조회 4,629
11-12-23 조회 4,193
11-12-23 조회 7,982
11-12-22 조회 3,696
11-12-17 조회 3,654
11-12-12 조회 3,067
11-12-08 조회 7,625
11-12-08 조회 3,483
11-12-07 조회 3,781
11-12-06 조회 5,480
11-12-02 조회 3,446
11-12-01 조회 3,112
11-11-30 조회 6,904
11-11-26 조회 3,836
11-11-24 조회 4,628
11-11-22 조회 2,996
11-11-22 조회 6,626
11-11-18 조회 5,004
11-11-16 조회 3,422
11-11-14 조회 3,445
11-11-12 조회 3,944
11-11-08 조회 3,264
11-11-06 조회 1만
11-11-06 조회 3,836
11-11-03 조회 5,528
11-11-02 조회 5,791
11-11-01 조회 9,313
11-10-19 조회 2,800
11-10-17 조회 2,603
11-10-10 조회 2,547
11-10-07 조회 3,337
11-10-06 조회 3,932
11-10-06 조회 2,486
11-10-02 조회 3,235
11-09-08 조회 4,241
11-09-08 조회 2,618
11-09-07 조회 2,611
11-09-02 조회 2,689
11-09-01 조회 3,625
11-08-28 조회 3,517
11-08-23 조회 3,365
11-08-22 조회 2,781
11-08-22 조회 2,375
11-08-13 조회 2,420
11-08-05 조회 2,875
11-08-03 조회 4,086
11-07-03 조회 2,552
11-06-15 조회 3,209
11-06-15 조회 3,041
11-05-15 조회 2,844
11-05-11 조회 5,577
11-04-12 조회 2,981
11-01-27 조회 3,814
11-01-26 조회 2,611
11-01-26 조회 4,458
11-01-18 조회 2,667
10-11-23 조회 2,823
10-10-24 조회 4,727
10-09-15 조회 4,412
10-09-07 조회 3,384
10-08-27 조회 4,074
10-08-20 조회 6,964
10-07-30 조회 5,640
10-06-30 조회 2,865
10-06-11 조회 4,625
10-06-11 조회 3,320
10-05-15 조회 4,156
10-05-10 조회 2,841
10-03-19 조회 5,406
10-03-05 조회 5,172
10-02-17 조회 5,574
09-11-21 조회 6,921
09-11-09 조회 3,995
09-11-04 조회 6,715
09-10-26 조회 3,851