UE5

UE C++ Json file 수정, 업데이트 ( 쓰기X )

우대비 2023. 7. 7. 12:24
반응형

JsonString에 Json안의 데이터들을 불러온 후

JsonReader, JsonObject를 이용해서 수정

FString JsonString;
FString filepath = FPaths::ProjectContentDir() + "\\Assets\\Json\\SaveFile.json";
FFileHelper::LoadFileToString(JsonString, *filepath);
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonString);
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());

if (FJsonSerializer::Deserialize(JsonReader, JsonObject) && JsonObject.IsValid())
{
    TArray<TSharedPtr<FJsonValue>> JsonValueArray = JsonObject->GetArrayField(TEXT("SaveFiles"));

    for (auto jsonValue : JsonValueArray) {
        TSharedPtr<FJsonObject> jsonValueObject = jsonValue->AsObject();

        FString slotName = GetSlotName(slotNumber);
        FString slotDay = slotName + "Day";

        jsonValueObject->SetStringField(slotName, SaveSlotName);
        jsonValueObject->SetNumberField(slotDay, currDay + 1);

        UKismetSystemLibrary::PrintString(GetWorld(), slotName + " : " + SaveSlotName); 
    }
}

위와 같이 SetStirngField, SetNumberField등의 함수를 이용해서

JsonObject에 데이터를 업데이트 할 수 있음

 

TSharedRef<TJsonWriter<TCHAR>> Writer = TJsonWriterFactory<>::Create(&JsonString);
FFileHelper::SaveStringToFile(*JsonString, *filepath);

이후에 위와같이 JsonString을 Json 파일에 덮어씌우면

당연하게도 우리는 JsonString의 데이터를 수정한게 아니기 때문에 수정이 안됨

 

FString jsonFormattedString;
TSharedRef<TJsonWriter<TCHAR>> jsonWriter = TJsonWriterFactory<TCHAR>::Create(&jsonFormattedString);
if (FJsonSerializer::Serialize(JsonObject.ToSharedRef(), jsonWriter))
{
    FFileHelper::SaveStringToFile(jsonFormattedString, *filepath);
}

수정된 JsonObject의 데이터를 불러와서 파일에 저장해줘야함

 

 

반응형
LIST