json_decode 함수 설명 및 활용 예제
개요
json_decode
함수는 JSON 문자열을 해석하고 GameMaker에서 사용할 수 있는 DS 맵으로 변환합니다. 이 함수는 여전히 DS 맵에 유효하지만, json_parse
와 structs
함수로 대체되었습니다. 따라서 이 함수는 레거시 지원을 위해서만 사용하는 것이 좋습니다.
GameMaker는 JSON에서 필요한 DS 맵과 리스트를 생성하며, 정리할 때는 최상위 맵만 삭제하면 GameMaker가 자동으로 메모리에서 모든 하위 맵과 리스트를 삭제합니다.
JSON 해석 규칙
JSON을 해석할 때 다음과 같은 규칙이 적용됩니다 (최상위 구조에만 적용됨):
JSON 유형 | 반환되는 DS 맵 |
---|---|
단일 값 | "default"라는 단일 항목을 가진 DS 맵 |
객체 또는 값의 배열 | "default"라는 DS 리스트를 가진 DS 맵 |
객체 | 객체 항목이 포함된 DS 맵 |
사용 주의 사항
- 이 함수는 항상 DS 맵을 반환합니다. 최상위 요소가 객체가 아닌 경우 (예: 단일 값 "5" 또는 배열 "1, 2, 3, 4")는 "default"라는 키 아래에 DS 맵에 배치됩니다.
- 내부 리스트는 DS 맵에 포함되지 않고 직접적으로 해석됩니다.
- GameMaker 배열을 최상위에 작성한 경우, 또는 DS 맵이나 DS 리스트의 내용으로 작성한 경우, 이들은 배열이 아닌 DS 리스트로 해석됩니다.
- JSON이 어떤 키로 해석되는지 알 수 없을 경우,
ds_map_size
,ds_map_find_first
,ds_map_find_next
함수를 사용하여 정보를 얻을 수 있습니다. - JSON 파일은 최대 128단계의 중첩을 지원합니다.
문법
json_decode(string)
인수
인수 | 유형 | 설명 |
---|---|---|
string | String | 해석할 JSON 형식의 문자열 |
반환값
- DS 맵 또는 -1 (실패 시)
예제 코드
다음 코드는 JSON 문자열을 해석하고 글로벌 배열을 생성하는 예제입니다.
var resultMap = json_decode(requestResult);
var list = ds_map_find_value(resultMap, "default");
var size = ds_list_size(list);
for (var n = 0; n < ds_list_size(list); n++;) {
var map = ds_list_find_value(list, n);
var curr = ds_map_find_first(map);
while (is_string(curr)) {
global.Name[n] = ds_map_find_value(map, "name");
curr = ds_map_find_next(map, curr);
}
}
ds_map_destroy(resultMap);
활용 예제
- 단일 값 JSON 해석
gml var jsonString = "{\"value\": 10}"; var resultMap = json_decode(jsonString); var value = ds_map_find_value(resultMap, "default");
- 객체 배열 해석
gml var jsonString = "[{\"name\": \"Alice\"}, {\"name\": \"Bob\"}]"; var resultMap = json_decode(jsonString); var list = ds_map_find_value(resultMap, "default");
- 중첩된 JSON 해석
gml var jsonString = "{\"users\": [{\"name\": \"Alice\"}, {\"name\": \"Bob\"}]}"; var resultMap = json_decode(jsonString); var usersList = ds_map_find_value(resultMap, "default");
- JSON 파일 로드
gml var jsonString = file_text_read("data.json"); var resultMap = json_decode(jsonString);
- JSON에서 특정 키 값 찾기
gml var jsonString = "{\"item\": {\"name\": \"Sword\", \"damage\": 10}}"; var resultMap = json_decode(jsonString); var itemMap = ds_map_find_value(resultMap, "item"); var itemName = ds_map_find_value(itemMap, "name");
이와 같은 방식으로 json_decode
함수를 활용하여 다양한 JSON 데이터를 GameMaker에서 쉽게 사용할 수 있습니다.