Json 형태의 파일을 언리얼에서 사용하기 위해 파싱 하는 방법
일단 Json 파일 자체를 가져오는건 다음에 하고 지금은 가상 데이터를 JsonObject 형태로 받고 다시 FString 에 넣겠다.
DataToJson 의 예제 4가지
- 멤버를 하나씩 셋팅한다.
- FJsonObjectConverter 를 사용해서 한 번에 처리한다.
- 여러개의 데이터를 하나씩 셋팅한다.
- FJsonObjectConverter 를 사용해서 여러 데이터를 처리한다.
1. 멤버를 하나씩 셋팅
특징 : 원하는 멤버만 셋팅하고 싶다면 이 방식을 사용하면 좋다.
먼저 원하는 데이터를 구조체로 레이아웃 설정을 해준다.
구조체에 가상의 데이터를 생성한다.
이제 JsonObejct 를 생성하고 데이터를 JObj 에 셋팅한다.
이때, Array 계열의 멤버는 따로 FJsonValue 에 하나씩 담아서 ArrayField 에 추가한다.
넣고 나면 마지막으로 JssonWriterFactory 를 이용해 JsonWriter 를 생성한다.다음 FString 에 직렬화 작업을 해주기 위해 JsonObject 를 Writer와 연결하여 FString 변수에 JsonObject 의 데이터를 쓴다. 그 역할이 Writer 이다.
결과 Json 형식으로 FString 이 찍힘
2. FJsonObjectConverter 를 이용
Json 과 형식을 맞춰서 사용하면 컨버터를 이용하는 것도 좋다.
이 말은 반대로 형식을 맞춰야하기 때문에 안넣어도 되는 더미 데이터가 넘겨질수 있다는 것이다.
JsonConverter 를 쓸려면 USTRUCT 형식의 언리얼 구조체여야한다. 멤버에도 UPROPERTY 를 붙여주는게 좋다.
컨버터를 사용해서 한 번에 JsonString 형식으로 만들어 FString에 할당 가능하다.
결과 >> 더 간편하게 사용 가능하지만 형식을 맞춰줘야 한다는 것이 특징이다.
3. 여러 데이터를 하나씩 셋팅
위와 같은 가상 데이터가 하나가 아니라 여러개 일 때에는 어떻게 셋팅할까?
그냥 일반적으로 for 문을 돌린다음에 넣을 수 가 없다.
FJsonObject 로 만든 객체들을 배열에 다시 넣어 직렬화해주어야한다.
for 문을 이용해서 여러 가상 데이터를 만들고 배열에 넣어준다.
이제 추가로 배열을 하나 더 만드는데 이 배열의 역할은 FJsonValue 를 저장하는 역할이다. FJsonValue 는 밑에서 JsonObject 를 가지게 될 것.
순서를 쉽게 보면 FJsonObject 생성 >> FJsonValue 로 멤버 내에 배열을 Value 로 만들고 각각 다시 ValueArray 에 넣고 JsonObject 에 셋팅 >> JsonObject 를 이용해서 FJsonValueObject 객체 만들기 >> 최종 Value 배열에 추가하기
이제 저 배열 형식의 JsonObject 들을 가지고 있는 JsonValue 배열을 직렬화 시켜준다.
결과 Json 형식으로 많은 데이터를 한 번에 FString 에 직렬화 하였다.
4. 컨버터를 이용한 여러 가상 데이터를 셋팅
3번 방식에서 컨버터를 사용하는 것 외에 차이가 없다. 다만, 컨버터를 사용한다면 주의 할 점이 있는데
구조체를 담은 배열을 넘기는 것이 불가능하다.
그래서 구조체로 구조체를 감싸는 형식을 사용한다.
이는
위와 같다.
이렇게 2개의 구조체를 활용한다.
결과
마지막으로 Json 형식의 FString 을 다시 Data 에 넣는다.
1번 방식 : 여기서는 FJsonObjectConverter 를 이용해 Json 형식의 FString 변수로 JsonObject 를 만들고 그 내용을 구조체에 넣는다.
2번 방식 : TJsonReader 를 사용해 Json 형식의 FString 을 읽을 수 있는 리더를 만들고
JSonObject 변수에 데이터를 역직렬화하여 넣어준다.
다음 JsonObject 에 대입 된 데이터들을 TEXT 로 각각 Get 해서 구조체의 멤버에 할당한다.
결과로 구조체 변수에 JsonObject 의 내용이 들어갔다.
'새싹 UE5' 카테고리의 다른 글
Unreal Network - Possess 동기화 & Spectator Pawn (0) | 2024.11.28 |
---|---|
Unreal Network - Pistol, Fire, Dead 동기화 (0) | 2024.11.27 |
24-11-22 네트워크 큐브 생성 동기화 (0) | 2024.11.22 |
24-11-21 언리얼 네트워크 캐릭터 동기화 (1) | 2024.11.22 |
24-11-20 언리얼 네트워크 - 색상 동기화와 RPC (0) | 2024.11.20 |