json_stringify 함수 설명
json_stringify
함수는 단일 구조체 또는 중첩된 구조체와 배열의 계층을 유효한 JSON 문자열로 변환하는 기능을 제공합니다. 초기 값으로 구조체(aStruct
) 또는 배열(anArray
)을 제공하면, 이 함수는 이를 "문자열화"하여 JSON 문자열로 변환합니다. 즉, GameMaker 배열은 JSON 배열로, GameMaker 구조체는 JSON 객체로 변환됩니다. 선택적으로 "예쁘게" 출력할 수 있으며, 이는 최종 JSON이 읽기 쉽게 포맷팅됨을 의미합니다.
사용 주의 사항
- 이 함수는 자산, 데이터 구조 및 기타 런타임 자산에 포함된 데이터를 JSON으로 직렬화하지 않으며, 자산의 내부 핸들 참조만 저장합니다. 이는 게임 실행 간 인덱스가 변경되기 때문에 큰 의미가 없습니다.
- JSON을 파싱할 때, 이러한 핸들은 런타임 참조로 다시 변환되어 자산을 정상적으로 사용할 수 있습니다. 이는 핸들로 표현되는 모든 자산 유형에 해당합니다.
- 게임 세션 간 자산 정보가 변경될 수 있으므로, 자산 이름이 변경되지 않는 한 이러한 참조는 링크를 유지합니다.
- 데이터 구조(특히 리스트와 맵)를 직렬화하려면
json_encode
함수를 사용해야 합니다. - GameMaker는 JSON에서 특정 값을 문자열로 인코딩하여 나중에 올바르게 읽을 수 있도록 합니다.
문법
json_stringify(val, [pretty_print], [filter_func]);
인수 | 유형 | 설명 |
---|---|---|
val | Struct 또는 Array | JSON 문자열로 변환할 구조체 또는 배열의 참조 값 |
pretty_print | Boolean | 문자열을 예쁘게 출력할지 여부 (읽기 쉽게 들여쓰기 및 줄 바꿈 삽입) |
filter_func | Function | 각 항목을 처리하는 필터 함수. 문법: function(key, value) -> new_value |
예제
예제 1: 기본 사용법
var _contents = {version: "1.0.0", data: {coins: 4, mana: 15, playername: "Gurpreet", items: [ITEM.SWORD, ITEM.BOW, ITEM.GUITAR]}};
var _json_string = json_stringify(_contents);
위 코드는 _contents
구조체를 JSON 문자열로 변환하고, 그 문자열을 변수에 저장합니다. 반환된 문자열은 다음과 같습니다:
{ "data": { "items": [ 0.0, 1.0, 2.0 ], "coins": 4.0, "mana": 15.0, "playername": "Gurpreet" }, "version": "1.0.0" }
예제 2: 예쁘게 출력하기
var _contents = {version: "1.0.0", data: {coins: 5, mana: 0, playername: "Bart", items: [ITEM.SWORD, ITEM.BOW, ITEM.PIANO]}};
var _json_string = json_stringify(_contents, true);
위 코드는 _contents
구조체를 JSON 문자열로 변환하고, pretty_print
매개변수를 true
로 설정하여 문자열을 예쁘게 출력합니다. 결과 문자열은 다음과 같습니다:
{"data":{"mana":0.0,"playername":"Bart","items":[0,1,2],"coins":5.0},"version":"1.0.0"}
예제 3: 필터 함수 사용하기
var data = {x: 5.2344, y: 10.601, last_clicked: undefined, values: [2000.1, 30.56, undefined, {slot: 10, skin: undefined}]};
var json = json_stringify(data, true, function(key, value) {
if (is_real(value)) return round(value);
if (is_undefined(value)) return 0;
return value;
});
show_debug_message(json);
위 코드는 구조체를 JSON으로 문자열화하고, 예쁘게 출력하며, 필터 함수를 사용하여 일부 값의 유형을 수정합니다. 값이 실수인 경우 반올림하고, undefined
인 경우 0으로 변경하며, 그렇지 않으면 동일한 값을 반환합니다.