【UE5 C++课程系列笔记】32——读Json文件并解析

前言

在上一篇(【UE5 C++课程系列笔记】31------创建Json并保存为文件)中我们已经将Json存储到Json文件中,本篇会通过读取该Json文件来解析Json。

步骤

  1. 定义一个函数用于读取Json,这里函数命名为"ReadJson"

函数实现如下,首先加载Json文件从而获得Json字符串

通过Json字符串构建Json对象

解析Json对象中的数字、字符串、Json对象和数组类型

完整代码:

cpp 复制代码
void ASampleJson::ReadJson()
{
	//从文件中获取Json字符串
	FString JsonFilePath = FPaths::ProjectSavedDir() / TEXT("GoodJson.json");
	FString JsonString = TEXT("");
	FFileHelper::LoadFileToString(JsonString, *JsonFilePath);

	//通过Json字符串构建Json对象
	TSharedPtr<FJsonObject> JsonObject;
	TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonString);

	//解析Json
	bool IsDeserialize = FJsonSerializer::Deserialize(JsonReader, JsonObject);  //判断能否反序列化
	if (IsDeserialize) 
	{
		//解析数字
		int32 CodeNum = JsonObject->GetNumberField(TEXT("Code"));

		//解析字符串
		FString Message = JsonObject->GetStringField(TEXT("Message"));

		//解析JsonObject
		TSharedPtr<FJsonObject> Server = JsonObject->GetObjectField(TEXT("Server"));
		FString ServerName = Server->GetStringField(TEXT("ServerName"));
		FString ServerVersion = Server->GetStringField(TEXT("ServerVersion"));

		//解析数组
		TArray<TSharedPtr<FJsonValue>> MyArray = JsonObject->GetArrayField(TEXT("MyArray"));
		for (auto& Ele : MyArray)
		{
			int32 Id = Ele->AsNumber();
		}

		//解析数组嵌套Json
		TArray<TSharedPtr<FJsonValue>> Workers = JsonObject->GetArrayField(TEXT("Workers"));
		for (auto& Ele : Workers)
		{
			TSharedPtr<FJsonObject> Worker = Ele->AsObject();
			int32 ID = Worker->GetIntegerField(TEXT("ID"));
			FString Name = Worker->GetStringField(TEXT("Name"));
			int32 Age = Worker->GetIntegerField(TEXT("Age"));
		}
	}
}
相关推荐
YuforiaCode24 分钟前
第十二届蓝桥杯 2021 C/C++组 空间
c语言·c++·蓝桥杯
YuforiaCode32 分钟前
第十二届蓝桥杯 2021 C/C++组 卡片
c语言·c++·蓝桥杯
努力努力再努力wz2 小时前
【Linux实践系列】:进程间通信:万字详解命名管道实现通信
android·linux·运维·服务器·c++·c
炯哈哈3 小时前
【上位机——MFC】文档
开发语言·c++·mfc·上位机
愚润求学4 小时前
【C++11】可变参数模板
开发语言·c++·笔记·c++11·模板
WW_千谷山4_sch4 小时前
MYOJ_1349:(洛谷P3951)[NOIP 2017 提高组] 小凯的疑惑(数学公式套用,两步搞定代码)
c++·算法
共享家95274 小时前
深入探究C++ 中的stack、queue和deque
c++
How_doyou_do4 小时前
项目实战-贪吃蛇大作战【补档】
c语言·c++·visual studio
Ethon_王4 小时前
走进Qt--信号与槽机制详解与实战
c++·qt
小卡皮巴拉4 小时前
【力扣刷题实战】丢失的数字
c++·算法·leetcode·位运算