이 포스트에서는 PHP에서 JSON 데이터를 파싱하는 방법을 설명합니다.
일단 다음과 같은 JSON 파일이 gfriend.json이라는 이름으로 존재한다고 가정을 해 봅시다.
{ "name": "여자친구", "alias": "GFRIEND", "members": [ "소원", "예린", "은하", "유주", "신비", "엄지" ], "albums": { "EP 1집": "Season of Glass", "EP 2집": "Flower Bud", "EP 3집": "Snowflake", "정규 1집": "LOL", "EP 4집": "THE AWAKENING" } }
이 JSON 파일을 읽기 위해 HTML 형식의 PHP 코드를 작성한다면 다음과 같습니다.
<?php /* PHP JSON parser sample */ $data_str = file_get_contents('gfriend.json'); $json = json_decode($data_str, true); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>PHP JSON parser sample</title> </head> <body> <h2 id="gname"><?php echo $json['name']; if (array_key_exists('alias', $json) ) printf(" (%s)", $json['alias']); ?></h2> <p>멤버 구성: <span id="members"><?php echo implode(', ', $json['members']); ?></span></p> <h3>앨범 목록</h3> <ul id="albums"><?php foreach ($json['albums'] as $key => $value) { printf("<li>%s: %s</li>\n", $key, $value); } ?></ul> </body> </html>
PHP로 XML 파싱하기 포스트에서 설명한 것과 구조가 비슷하지만 다릅니다.
3번 줄에서 gfriend.json 문서를 불러와서 $data_str 변수에 문자열 형태로 대입한 다음 4번 줄에서 이를 JSON 형식으로 변환해서 $json 변수에 대입합니다. 두 번째에 true라는 값이 인자로 있는데 이는 데이터를 배열 형태로 저장하기 위해서 넣는 것입니다.
16번 줄부터 JSON 데이터를 표시합니다. 먼저 ‘name’ 키에 해당하는 값을 추출하여 출력한 다음, 17번 줄은 ‘alias’ 키가 있는지 검사해서 있다면 18번 줄의 내용을 수행해서 ‘alias’ 키에 해당하는 값을 출력합니다.
21번 줄은 ‘members’ 키에 해당하는 값으로 존재하는 멤버 목록 배열을 출력합니다. 이전 예제에서는 foreach 문을 이용했지만 여기서는 implode() 함수를 사용합니다. 이 함수는 배열의 값들을 모두 하나의 문자열로 이어붙이는 함수입니다. 앞의 인자 ', '
는 쉼표와 공백문자(, )를 구분자로 함을 의미하고 뒤의 인자 $json['members']
는 $json[‘members’]에 있는 배열의 값을 전부 이어붙임을 의미합니다.
24번 줄부터 26번 줄까지는 ‘album’ 키에 해당하는 값으로 존재하는 앨범 목록 배열을 출력합니다. 이 배열은 딕셔너리 형태로 되어 있기 때문에 as $key => $value
식으로 합니다. 이러면 $key에는 키의 이름이, $value에는 그 키에 해당하는 값이 출력됩니다. 이 예제에서는 $key: $value 형식으로 출력(예: ‘EP 1집: Season of Glass’)합니다.
이렇게 코딩한 후 문서를 불러왔을 때,
멤버 구성: 소원, 예린, 은하, 유주, 신비, 엄지
- EP 1집: Season of Glass
- EP 2집: Flower Bud
- EP 3집: SNOWFLAKE
- 정규 1집: LOL
- EP 4집: THE AWAKENING
파싱된 JSON 데이터가 이같이 출력된다면 성공입니다.
이로써 PHP로 JSON 문서를 파싱해서 처리하는 프로그램을 만들어 볼 수 있습니다.
^^