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문으로 돌려서 한번에 접근하기 좋은거 같습니다 흐흐
댓글 ( 4)
댓글 남기기