게임은 데이터 덩어리이다.
데이터를 다루는데 규격은 필수이다. 그 중 JSON 은 굉장히 유용하게 쓰인다.
언리얼 엔진에서 JSON 문자열을 다루는 기능을 제공한다.
(블루프린트 사용 안됨, C++ 만 가능)
이 기능을 사용하여 JSON 스트링을 파싱해보자.
준비하기
먼저 [ProjectName].build.cs 파일의 의존성 배열에 "Json" 을 추가한다.
빌드할때 Json 관련 라이브러리를 추가하게 된다.
JSON 문자열 읽어오기
JSON 스트링을 읽어오려면 TJsonReader 가 필요하다.
TSharedRef<TJsonReader<TCHAR>> Reader = TJsonReaderFactory<TCHAR>::Create("JSON STRING");
"JSON STRING" 부분에 알맞는 JSON 문자열을 적어야 한다. 그대로 실행하면 오류난다.
Reader 를 만들었다면, 파싱한 데이터가 저장될 FJsonObject 가 필요하다.
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
공유포인터 형태로 객체를 감쌌다.
마지막으로 역직렬화 하여 JSON 문자열을 FJsonObject 형태로 바꾼다.
FJsonSerializer::Deserialize(Reader, JsonObject)
역직렬화를 마치면 JsonObject 변수를 통해 데이터를 읽어 올 수 있다.
데이터 읽기
json 에서 객체, 배열, 숫자, 문자열을 표현 할 수 있다.
안전한 방법과, 안전하지 않은 방법 두가지로 예제를 구성해보았다.
필드가 없는 경우 오류가 발생하기 때문에, 번거롭더라도 안전한 방법을 사용하는게 좋은 프로그램을 만드는
첫 걸음이 아닐까 싶다.
Object 읽기
TSharedPtr<FJsonObject> Object = JsonObject->GetObjectField(TEXT("FieldName"));
또는
const TSharedPtr<FJsonObject>* JsonObject;
if(JsonObject->TryGetObjectField(TEXT("FieldName"), JsonObject)) {
// When Parsing Success.
} else {
// When Parsing Failed.
}
Number 읽기
int32 Value = JsonObject->GetIntegerField(TEXT("FieldName"));
또는
double Value;
if(JsonObject->TryGetNumberField(TEXT("FieldName"), Value)) {
// When Parsing Success.
} else {
// When Parsing Failed.
}
String 읽기
FString Value = JsonObject->GetStringField(TEXT("FieldName"));
또는
FString Value;
if(JsonObject->TryGetStringField(TEXT("FieldName"), Value)) {
// When Parsing Success.
} else {
// When Parsing Failed.
}
Array 읽기
TArray<TSharedPtr<FJsonValue>> Array = JsonObject->GetArrayField(TEXT("FieldName"));
또는
const TArray<TSharedPtr<FJsonValue>>* Value;
if(JsonObject->TryGetArrayField(TEXT("FieldName"), Value)) {
// When Parsing Success.
} else {
// When Parsing Failed.
}
Json 파싱에 대한 레퍼런스는 아래 링크를 참고하면 도움이 된다.
FJsonObject | Unreal Engine Documentation
FJsonValue 의 경우?
Json 값이지만, 아직 타입이 지정되지 않은 경우 이 값을 반환한다.
예를 들어, Array 를 파싱하는 경우 FJsonValue 로 구성된 값들을 반환하는데
json 특성상 배열에는 문자, 숫자, 객체가 막무가내로 들어갈 수 있어서 그렇다.
FJsonValue 를 만나는 경우 타입을 지정시켜 값을 파싱해야 한다.
FJsonValue to String
FString Value = Value.AsString();
FJsonValue to Number
double Value = Value.AsNumber();
FJsonValue to Object
TSharedPtr<FJsonObject> Object = Value.AsObject();
FJsonValue to Array
TArray<TSharedPtr<FJsonValue>> Array = Value.AsArray();
FJsonValue 에 대한 자세한 레퍼런스 정보는 아래 링크를 참고하자.
FJsonValue | Unreal Engine Documentation
이정도만 알고있으면 언리얼 엔진에서 JSON 문자열을 파싱하는데 어려움은 없을것이다.
'볼봇의 코딩 생활 > 언리얼한 엔진' 카테고리의 다른 글
UE4 안드로이드 무선 디버깅 & 디플로이 (0) | 2020.12.13 |
---|---|
UE4 자이로스코프 센서 사용하기 (0) | 2020.12.13 |
선택된 사운드 웨이브를 임포트 중인 사운드의 템플릿으로 사용할까요? 에 대해 (0) | 2020.11.21 |
UE4 스팀 VR 자동 실행 방지하기 (0) | 2020.11.21 |
UE4 VCRUNTIME140_1.dll 이 없어 실행 할 수 없는 경우 (0) | 2020.11.19 |