PHP

http://terminaldogma.tistory.com/52

 

제가 제대로 못배워서 그런지 모르겠지만 xml에서
attribute와 element 안의 글자의 역활을 명확히 못나누겠습니다.

attrubte로 표현한건 제 생각엔 사실 element 안에도 충분히 들어 갈 수 있고 반대의 경우도 가능하죠
괜히 파싱하는데 경우의 수만 늘려 귀찮게 합니다....

아무튼 단순함에 감동을 받은 json_decode를 시작하겠습니다.

PHP 5.2 이상에서는 json을 encode하고 decode 하는 함수를 기본적으로 제공합니다
바로 json_encode() 와 json_decode() 입니다.

오늘은 encode하는데는 관심이 없으므로 decode에 대해서만 간략히 쓰겠습니다.

우선 기본적으로 php.net에 가셔서 json_decode()를 검색하시면 여러 정보를 얻을 수 있지만
저에겐 결정적인 도움은 안되더라구요 ㅠ_ㅠ

우선 거기 있는 내용을 살짝 참고 하자면...
 

$contents = file_get_contents($url);  // url이나 파일 위치도 됩니다 "./data.txt" 뭐 이런식으로요

$contents = utf8_encode($contents);  // 이건 utf8로 인코딩 되어 있을 때 하면 안깨진다고 하는데... 

정확한 기능은 찾아 봐야 겠네요

$user = json_decode($contents);  // 저희가 원하던 바로 그 함수! 알아서 샤샤샥 파싱 해 줍니다.

 

{
   "id": "100001524547243",
   "name": "Kyeong Koo Kang",
   "first_name": "Kyeong Koo",
   "last_name": "Kang",   
   "hometown": {
      "id": "104064496296825",
      "name": "Busan"
   },   
   "bio": "Computer Science!!!!!",
   "education": [
      {
         "school": {
            "id": "111930928825462",
            "name": "asdf"
         },
         "year": {
            "id": "140617569303679",
            "name": "2007"
         },
         "type": "High School"
      },
      {
         "school": {
            "id": "110347362320445",
            "name": "zyx"
         },
         "type": "College"
      }
   ],
   "gender": "male"

} 





이런 json을 받아서 파싱 했다고 칩시다 ㅎ
위에 id나 name, first_name은 접근이 쉽습니다.

echo("Hello " . $user->name);


뭐 이런식으로 말이죠 문제는 hometown을 보시면 음?!?! 데이터 안에 또다른 json이?!
var_dump()로 데이터 형을 보시면 이녀석도 $user가 stdClass고 $user->hometown도 stdClass 입니다.
말 그대로 $user에 데이터 접근하듯이 하시면 됩니다.
 

$user->hometown->name

이렇게 말이죠 

자 이제 좀 더 내려가서 education을 볼까요? 

education안에 또다른 json들이 들어 있는데 중괄호{} 이녀석들 구분이 없습니다.
하지만 잘 보시면 대괄호[] 안에 감사져 있다는 것을 알 수 있습니다.
이녀석도 var_dump()로 보면 array라고 나옵니다.
배열처럼 접근하시면 됩니다. 

$user->education[0]

자 그럼  $user->education[0]는 뭘까요? 아마 stdClass일거 같군요... 이건 확인 안해봤습니다 큵...

아무튼 최종적으로 education안에 데이터는 이렇게 접근하시면 됩니다.

$user->education[0]->school->id 라던지
$user->education[0]->type 라던지....

일일이 분류 하는것도 좋지만
데이터에 배열이 적당히 들어가 있는게 for문으로 돌려서 한번에 접근하기 좋은거 같습니다 흐흐 

 

about author

PHRASE

Level 60  머나먼나라

술은 강하다. 왕은 더 강하다. 여자는 한층 더 강하다. 그러나 진리는 이보다도 한층 더 강하다. -마르틴 루터

댓글 ( 4)

댓글 남기기

작성

PHP 목록    more