[언리얼엔진] Json 파일 저장하기
- ⭐ Game Programming/Unreal Document
- 2022. 10. 13.
언리얼의 데이터를 json 파일로 추출하는 방법에 대해 알아보자
예제 파일
이전 로드 예제에서 사용했던 예제파일과 동일하게 출력되도록 할 예정이다.
{
"name" : "Kim"
"level" : 20,
"items" : [
{
"itemid" : 100,
"count" : 3,
}
{
"itemid" : 200,
"count" : 1,
}
]
"skills" : [
"fireball",
"icebolt",
]
}
파일 내용 작성
JsonWriter에 직접 Key Value를 입력하는 방법과 데이터를 가공한 JsonObject가 있다면 FJsonSerializer::Serialize 함수를 통해 자동 입력하는 방법이 있다.
//Key Value 입력하는 방식
FString FileStr;
FString FilePath = TEXT("path/test.json");
TShareRef<TJsonWriter<TCHAR>> Writer = TJsonWriterFactory<>::Create(&FileStr);
Writer->WriteObjectStart();
Writer->WriteValue(TEXT("Name"), CharName);
Writer->WriteValue(TEXT("level"), Level);
Writer->WriteArrayStart(TEXT("items"));
for(FItemData& ItemData : ItemDatas)
{
Writer->WriteObjectStart();
Writer->WriteValue(TEXT("itemid"), ItemData.ItemID);
Writer->WriteValue(TEXT("count"), ItemData.Count);
Writer->WriteObjectEnd();
}
FModuleDescriptor::WriteArray(Writer.Get(), TEXT("skills"), Skills); //TArray<FString> Skills;
Writer->WriteObjectEnd();
Writer->close();
FFileHelper::SaveStringToFile(*FileStr, *filePath);
//JsonObject를 만들어 Serialize 하는 방식
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
JsonObject->SetStringField(TEXT("Name"), CharName);
JsonObject->SetNumberField(TEXT("level"), Level);
TArray< TSharedPtr<FJsonValue> > ItemsObj;
for(FItemData& ItemData : ItemDatas)
{
TSharedPtr<FJsonObject> ItemObj = MakeShareable(new FJsonObject);
ItemObj->SetNumberField(TEXT("itemid"), ItemData.ItemID);
ItemObj->SetNumberField(TEXT("count"), ItemData.Count);
ItemsObj.Add(MakeShareable(new FJsonValueObject(ItemObj));
}
JsonObject->SetArrayField(TEXT("items"), ItemsObj);
TArray< TSharedPtr<FJsonValue> > SkillsObj;
for(FString& SkillName : Skills)
{
TSharedPtr<FJsonValueString> SkillObj = MakeShareable(new FJsonObject(SkillName));
SkillsObj.Add(SkillObj);
}
JsonObject->SetArrayField(TEXT("skills"), SkillsObj);
FString FileStr;
FString FilePath = TEXT("path/test.json");
TShareRef<TJsonWriter<TCHAR>> Writer = TJsonWriterFactory<>::Create(&FileStr);
FFileHelper::SaveStringToFile(*FileStr, *filePath);
문서
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Json/Serialization/TJsonStringWriter/
반응형