JSON 파싱 함수 설명

이 문서에서는 JSON 문자열을 파싱하여 중첩된 배열과 구조체로 변환하는 json_parse 함수에 대해 설명합니다. 배열은 JSON 배열에 해당하고, 구조체는 JSON 객체에 해당합니다. JSON은 json_stringify를 사용하여 미리 생성되었거나 다른 유효한 소스에서 가져와야 합니다. 파싱할 문자열을 제공하면, 함수는 최상위 배열 또는 구조체를 반환하며, 이를 코드에서 사용할 수 있습니다.

사용 주의 사항

  • 유효하지 않은 값을 파싱하려고 하면 예외 오류가 발생합니다. (예: 문자열이 아니거나 유효하지 않은 JSON)
  • 이 함수는 최대 128의 중첩 깊이를 가진 JSON 파일만 로드할 수 있습니다.
  • null 값은 undefined로 파싱됩니다.
  • json_stringify로 직렬화된 런타임 값은 다시 런타임 값으로 변환됩니다. (예: 핸들, int64, NaN, infinity 등) 그러나 이 변환은 선택적 인수 inhibit_string_converttrue를 전달하여 비활성화할 수 있습니다.
  • 자세한 내용은 데이터 변환 및 JSON 사용 가이드를 참조하세요.

문법

json_parse(json, [filter_func], [inhibit_string_convert])
인수 유형 설명
json String 파싱할 JSON 문자열
filter_func Function 각 항목을 처리하는 필터 함수. inhibit_string_convert만 설정할 경우 값이나 undefined를 전달하지 마세요.
inhibit_string_convert Boolean 문자열을 런타임 참조로 변환하지 않도록 설정합니다. 기본값은 false입니다.

반환 값

  • 구조체 또는 배열

예제 1: 기본 사용법

var json = "{\"myObj\": { \"apples\":10, \"oranges\":12, \"potatoes\":100000, \"avocados\":0 }, \"myArray\":[0, 1, 2, 2, 4, 0, 1, 5, 1]}";
var data = json_parse(json);
show_debug_message(data);

위 코드는 유효한 JSON을 포함하는 새 문자열을 생성하고, json_parse를 호출하여 해당 문자열을 GML 구조체로 변환합니다. 결과는 디버그 로그에 출력됩니다.

JSON 문자열 내의 모든 큰따옴표(") 앞에 백슬래시(\)가 있는 것을 확인할 수 있습니다. 이는 큰따옴표가 문자열 내에서 실제 문자로 읽히도록 하기 위함입니다. 외부 파일에서 JSON을 로드하는 경우, 그 파일 내에서는 문자를 이스케이프할 필요가 없습니다.

JSON 문자열을 파싱한 후, 구조를 알고 있다면 다양한 변수 함수들을 사용하여 내용을 확인하고 읽을 수 있습니다.

var data = json_parse(json);

// myObj 변수가 있는지 확인
if (struct_exists(data, "myObj")) {
    // 구조체인지 확인
    if (is_struct(data.myObj)) {
        // 구조체의 모든 멤버를 로그에 출력
        var _names = struct_get_names(data.myObj);
        var _str = "";
        for (var i = 0; i < array_length(_names); i++) {
            _str = _names[i] + ": " + string(struct_get(data.myObj, _names[i]));
            show_debug_message(_str);
        }
    }
}

// myArray 변수가 있는지 확인
if (struct_exists(data, "myArray")) {
    // 배열인지 확인
    if (is_array(data.myArray)) {
        show_debug_message(data.myArray);
    }
}

위 코드는 주어진 JSON 문자열을 파싱하고, 다음과 같은 콘솔 출력을 생성합니다:

oranges: 12
potatoes: 100000
avocados: 0
apples: 10
[ 0,1,2,2,4,0,1,5,1 ]

예제 2: 필터 함수 사용

var json = "{\"myObj\": { \"apples\":10, \"oranges\":12, \"potatoes\":100000, \"avocados\":0 }, \"myArray\":[0, 1, 2, 2, 4, 0, 1, 5, 1]}";
var data = json_parse(json, function (key, value) {
    show_debug_message($"Key: {key}, Value: {value}");
    return value;
});

위 코드는 이전 예제와 동일한 JSON 문자열을 사용하지만, 이번에는 필터 함수를 사용합니다. 필터 함수는 각 항목의 키와 값을 출력 로그에 표시합니다.

출력 예시는 다음과 같습니다:

Key: apples, Value: 10
Key: oranges, Value: 12
Key: potatoes, Value: 100000
Key: avocados, Value: 0
Key: myObj, Value: { apples : 10, oranges : 12, potatoes : 100000, avocados : 0 }
Key: 8, Value: 1
Key: 7, Value: 5
Key: 6, Value: 1
Key: 5, Value: 0
Key: 4, Value: 4
Key: 3, Value: 2
Key: 2, Value: 2
Key: 1, Value: 1
Key: 0, Value: 0
Key: myArray, Value: [ 0,1,2,2,4,0,1,5,1 ]
Key: , Value: { myObj : { apples : 10, oranges : 12, potatoes : 100000, avocados : 0 }, myArray : [ 0,1,2,2,4,0,1,5,1 ] }

예제 3: 값 재정의

var json = "{\"prices\": [2, 5, 1, 2, 4, 5]}";
var data = json_parse(json, function (key, value) {
    return is_real(value) ? value * 1000 : value;
});
show_debug_message(data);

위 코드는 구조체 내에 배열이 포함된 JSON 문자열을 사용합니다. 그런 다음 json_parse를 필터 함수와 함께 실행하여 각 값을 1000으로 곱합니다. 결과 구조는 다음과 같습니다:

{ prices : [ 2000,5000,1000,2000,4000,5000 ] }

Read more

기술 문서 해설 및 활용 예제

이 문서는 특정 기술에 대한 설명과 활용 방법을 다룹니다. 아래에서 내용을 쉽게 이해할 수 있도록 해설하고, 다양한 활용 및 응용 예제를 추가로 제공합니다. 기술 개요 이 기술은 게임 개발에서 자주 사용되는 기능으로, 특정 작업을 자동화하거나 효율적으로 처리하는 데 도움을 줍니다. 주로 게임의 로직을 구성하거나 사용자 인터페이스를 제어하는 데 사용됩니다. 주요

By 이재협/실장/시스템개발실/PHYSIA

키워드 설명서

이 문서는 특정 키워드에 대한 설명과 사용법을 제공합니다. 문법 (arguments); 인수 인수 이름 유형 설명 argument_name 인수에 대한 설명을 여기에 작성합니다. 반환값 (선택적 설명) 예제 code_example() { // 여기에 코드 예제를 설명합니다. } 코드 예제 설명 위의 코드 예제는 특정 기능을 수행하는 함수의 기본 구조를 보여줍니다. 이 함수는 인수를 받아들이고, 특정

By 이재협/실장/시스템개발실/PHYSIA

GameMaker 환경 설정 및 기능

이 문서에서는 GameMaker의 환경 설정 및 다양한 IDE 기능에 대한 정보를 제공합니다. 다음은 주요 항목들입니다: IDE 환경 설정 IDE(통합 개발 환경) 설정은 GameMaker의 전반적인 사용 경험을 조정하는 데 도움을 줍니다. 여기서 사용자는 개인의 필요에 맞게 다양한 옵션을 설정할 수 있습니다. 주요 설정 항목 설정 항목 설명 테마 IDE의 색상

By 이재협/실장/시스템개발실/PHYSIA

GameMaker IDE 설명서

GameMaker IDE는 게임을 만들고 소프트웨어에서 제공하는 모든 기능을 활용하는 주요 인터페이스입니다. 이 프로그램은 시작 화면부터 게임을 만들기 위해 사용하는 모든 편집기 창까지 포함되며, 매뉴얼과 다양한 튜토리얼에서 IDE라고 언급됩니다. IDE의 구성 요소 다음 섹션에서는 IDE에 대한 정보를 다룹니다: 1. 설정 및 기능 IDE의 설정 및 기능은 사용자가 게임 개발을 보다 효율적으로

By 이재협/실장/시스템개발실/PHYSIA