欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【UE5 C++课程系列笔记】33——商业化Json读写

【UE5 C++课程系列笔记】33——商业化Json读写

2025/4/11 18:47:32 来源:https://blog.csdn.net/ChaoChao66666/article/details/146980142  浏览:    关键词:【UE5 C++课程系列笔记】33——商业化Json读写

目录

前言 

步骤 

一、写入

二、读取


前言 

有时候我们会获取到如下形式的Json,其中Data字段的内容经过字符串化处理。本篇文章介绍如何读写这种形式的Json。

步骤 

一、写入

void ASampleJson::WriteBadJson()
{// 创建主JSON对象TSharedPtr<FJsonObject> MainJsonObject = MakeShareable(new FJsonObject());// 添加基本类型字段MainJsonObject->SetNumberField("Code", 998);MainJsonObject->SetStringField("Message", "Success");// 创建内部JSON对象TSharedPtr<FJsonObject> InnerJsonObject = MakeShareable(new FJsonObject());InnerJsonObject->SetStringField("ServerName", "ZhiChao");InnerJsonObject->SetNumberField("ServerVersion", 1.0f);// 将内部JSON对象序列化为紧凑格式的字符串FString InnerJsonString;TSharedRef<TJsonWriter<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>> InnerJsonWriter= TJsonWriterFactory<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>::Create(&InnerJsonString);	FJsonSerializer::Serialize(InnerJsonObject.ToSharedRef(), InnerJsonWriter);InnerJsonWriter->Close();// 将内部JSON字符串添加到主JSON对象的Data字段MainJsonObject->SetStringField("Data", InnerJsonString);// 将主JSON对象序列化为最终的JSON字符串FString FinalJsonString;TSharedRef<TJsonWriter<>> FinalJsonWriter = TJsonWriterFactory<>::Create(&FinalJsonString);FJsonSerializer::Serialize(MainJsonObject.ToSharedRef(), FinalJsonWriter);  //将JSON对象InnerJsonObject序列化为字符串FinalJsonWriter->Close();FString FilePath = FPaths::ProjectSavedDir() / TEXT("BadJson.json");if (FFileHelper::SaveStringToFile(FinalJsonString, *FilePath, FFileHelper::EEncodingOptions::ForceUTF8WithoutBOM)){UE_LOG(LogTemp, Warning, TEXT("JSON 文件保存成功: %s"), *FilePath);}else{UE_LOG(LogTemp, Error, TEXT("JSON 文件保存失败: %s"), *FilePath);}
}

最关键的部分是将Json对象序列化为字符串

二、读取

void ASampleJson::ReadBadJson()
{//从文件中获取Json字符串FString JsonFilePath = FPaths::ProjectSavedDir() / TEXT("BadJson.json");FString JsonString = TEXT("");FFileHelper::LoadFileToString(JsonString, *JsonFilePath);//通过Json字符串构建Json对象TSharedPtr<FJsonObject> JsonObject;TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonString);  //创建JSON读取器FJsonSerializer::Deserialize(JsonReader, JsonObject);  //使用JSON序列化器将JsonString解析为JsonObject//解析Jsonint32 Code = JsonObject->GetNumberField(TEXT("Code"));FString Message = JsonObject->GetStringField(TEXT("Message"));FString Data = JsonObject->GetStringField(TEXT("Data"));TSharedPtr<FJsonObject> DataJsonObject;TSharedRef<TJsonReader<TCHAR>> DataJsonReader = TJsonReaderFactory<TCHAR>::Create(Data);FJsonSerializer::Deserialize(DataJsonReader, DataJsonObject);FString ServerName = DataJsonObject->GetStringField(TEXT("ServerName"));float ServerVersion = DataJsonObject->GetNumberField(TEXT("ServerVersion"));
}

 其中最关键的部分是将Json字符串转化为Json对象

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词