반응형
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
'UE5' 카테고리의 다른 글
UE Groom, Mesh에 Binding (0) | 2023.08.03 |
---|---|
UE C++ DataTable만들고 Json으로 Export (0) | 2023.07.11 |
UE C++ Widget Bind (1) | 2023.07.06 |
UE Json File 불러와서 UStruct에 저장 (0) | 2023.06.20 |
“Cast of nullptr to AnimationBlendSpaceSampleGraph failed.” (0) | 2023.05.22 |