本文主要向大家介绍了 C/C++知识点之ue4 C++ json数据的读写,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
这是改变恢复机制的json文件的例子
//写入
TSharedPtrRootObject = MakeShareable(newFJsonObject);
TArray< TSharedPtr> PackagesThatCanBeRestored;
TSharedPtrEntryObject = MakeShareable(new FJsonObject);
EntryObject->SetStringField(TEXT("PackagePathName"), TEXT("Temp/Untitled_1"));
EntryObject->SetStringField(TEXT("AutoSavePath"), TEXT("Temp/Untitled_1_Auto1.umap"));
TSharedPtrEntryValue = MakeShareable(new FJsonValueObject(EntryObject));
PackagesThatCanBeRestored.Add(EntryValue);
RootObject->SetBoolField(TEXT("RestoreEnabled"), true);
RootObject->SetArrayField(TEXT("Packages"), PackagesThatCanBeRestored);
constFStringFilename = FPaths::GameSavedDir() /TEXT("Autosaves") /TEXT("PackageRestoreData.json");
FArchive* constFileAr = IFileManager::Get().CreateFileWriter(*Filename, FILEWRITE_EvenIfReadOnly);
if (FileAr)
{
TSharedRef> Writer = TJsonWriterFactory< TCHAR, TPrettyJsonPrintPolicy>::Create(FileAr);
FJsonSerializer::Serialize(RootObject.ToSharedRef(), Writer);
FileAr->Close();
}
// 读取本地json文件
const FString Filename = FPaths::GameSavedDir() / TEXT("Autosaves") / TEXT("PackageRestoreData.json");
FArchive* const FileAr = IFileManager::Get().CreateFileReader(*Filename);
bool bJsonLoaded = false;
TSharedPtrRootObject = MakeShareable(new FJsonObject);
{
TSharedRef Reader = TJsonReaderFactory::Create(FileAr);
bJsonLoaded = FJsonSerializer::Deserialize(Reader, RootObject);
FileAr->Close();
}
TMapPackagesThatCanBeRestored;
TArray< TSharedPtr> PackagesThatCanBeRestoredArray = RootObject->GetArrayField(TEXT("Packages"));
int32 TiRen = RootObject->GetIntegerField(TEXT("TiRen"));
for (auto It = PackagesThatCanBeRestoredArray.CreateConstIterator(); It; ++It)
{
TSharedPtrEntryObject = (*It)->AsObject();
const FString PackagePathName = EntryObject->GetStringField(TEXT("PackagePathName"));
const FString AutoSavePath = EntryObject->GetStringField(TEXT("AutoSavePath"));
PackagesThatCanBeRestored.Add(PackagePathName, AutoSavePath);
}
for (auto It = PackagesThatCanBeRestored.CreateConstIterator(); It; ++It)
{
if (TiRen == 1)
{
EditorStartupMap = FPaths::GameContentDir() / TEXT("Autosaves") / It->Value;
}
else
{
EditorStartupMap = AutoSaveUtils::GetAutoSaveDir() / It->Value;
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!