- //解析JSON文件
- //如何读取磁盘文件
- FString JsonStr;
- if(FFileHelper::LoadFileToString(JsonStr,TEXT("D:\\Unreal Projects\\UECPP\\Poniter\\Content\\Data\\1.json")))
- {
- //通过解析工厂创建解析阅读器
- TSharedRef
> JsonReade= TJsonReaderFactory<>::Create(JsonStr); - //创建用于接收的UE的Json对象
- TSharedPtr
JsonObject; - //通过序列化工具进行反序列化,序列化一般指,将内存数据结构转换为其他数据结构
- if(FJsonSerializer::Deserialize(JsonReade,JsonObject))
- {
- //以下是对文件数据的处理
- TArray
> JsonObjects = JsonObject->GetArrayField(TEXT("person")); - TSharedPtr
teacher = JsonObjects[0]->AsObject(); - TArray
> teachers = teacher->GetArrayField(TEXT("teachers")); - TSharedPtr
teacherobj = teachers[0]->AsObject(); - TSharedPtr
zhang = teacherobj->GetObjectField(TEXT("zhang")); - TArray
> Zhangs = zhang->GetArrayField(TEXT("hobby")); - for (auto item:Zhangs)
- {
- UE_LOG(LogTemp, Log, TEXT("ok%s"),*item->AsString())
- }
- }
- }
注:序列化一般指,将内存中的数据结构转为其他数据结构
- //序列化JSON
- TSharedPtr
ptr(new FJsonObject) ; - ptr->SetStringField(TEXT("name"),TEXT("张三"));
- ptr->SetNumberField(TEXT("age"),12);
- ptr->SetBoolField(TEXT("Student"),true);
- //构建书写器
- FString str;
- TSharedRef
> JsonWrite = TJsonWriterFactory<>::Create(&str); - if(FJsonSerializer::Serialize(ptr.ToSharedRef(),JsonWrite))
- {
- UE_LOG(LogTemp, Log, TEXT("ok%s"),*str)
- }
- TArray
> Prr; - Prr.Add(MakeShareable(new FJsonValueString(TEXT("文本"))));
- Prr.Add(MakeShareable(new FJsonValueBoolean(true)));
- TArray
> ptr; - ptr.Add(MakeShareable(new FJsonValueString(TEXT("哈哈"))));
- Prr.Add(MakeShareable(new FJsonValueArray(ptr)));
- TSharedPtr
prtobj(new FJsonObject); - prtobj->SetNumberField(TEXT("age"),12);
- Prr.Add(MakeShareable(new FJsonValueObject(prtobj)));
- //构建书写器
- FString str;
- TSharedRef
> write = TJsonWriterFactory<>::Create(&str); - if(FJsonSerializer::Serialize(Prr,write))
- {
- UE_LOG(LogTemp, Log, TEXT("%s"),*str)
- }
- //这里以将场景中的actor名字保存在一个文件中为例
-
- //创建JSON类型的数组
- TArray
> Array; - //创建存储Actor的数组
- TArray
ActorArray; - //获取所有actor
- UGameplayStatics::GetAllActorsOfClass(this,AActor::StaticClass(),ActorArray);
- //遍历将actor的名称加至JSON数组中
- for(auto item:ActorArray)
- {
- TSharedPtr
obj(new FJsonObject); - obj->SetStringField(TEXT("name"),item->GetName());
- Array.Add(MakeShareable(new FJsonValueObject(obj)));
- }
- //创建用于接收的字符串
- FString str;
- //构建书写器
- TSharedRef
>val = TJsonWriterFactory<>::Create(&str); - //进行序列化
- if(FJsonSerializer::Serialize(Array,val))
- {
- //保存至文件中
- FFileHelper::SaveStringToFile(str,TEXT("D:\\UnrealProjects\\UECPP\\Poniter\\Content\\Data\\2.json"));
- }