JSON Reader

一.大体思路

承接JSON Writer-CSDN博客文章

1.首先 我们同样通过 LoadFileToString 将文件 读到FString里。这里是GoodJsonString

2.声明出来一个FJsonObject,

TJsonReader<TCHAR> 是 通过TJ送Reader Factory<TCHAR>里的Ceate 制造出来,并且在Create时,里面传入之前读到的FString。

3.这个时候,通过将FJsonSerializer类里的Deserialize函数,传入

(TJsonReader<TCHAR>,FJsonObject)

这个时候,就实现了,FString到FJsonReader,再到FJsonObject。

4.JsonObject又有各种As开头的函数,进行转换为对应的变量。

cpp 复制代码
void ASimpleActor::ReadJSON()
{
	FString GoodJsonString = TEXT("");
	FString FilePath = FPaths::ProjectSavedDir() / TEXT("GoodJSON.json");
	//序列化
	FFileHelper::LoadFileToString(GoodJsonString, *FilePath);
	//TSharedRef<TJsonReader<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>> GoodJsonWriter =
	//	TJsonReader<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>::Create(&GoodJsonString);

	TSharedPtr<FJsonObject> BackGoodJSON;
	TSharedRef<TJsonReader<TCHAR>> BackGoodJSONReader =
	TJsonReaderFactory<TCHAR>::Create(GoodJsonString);

	bool IsDeseriablize = FJsonSerializer::Deserialize(BackGoodJSONReader,BackGoodJSON);   //需要Json模块
	if (IsDeseriablize)
	{
		TSharedPtr<FJsonValue> CodeJsonValue = BackGoodJSON->TryGetField(TEXT("Code"));
		if (CodeJsonValue.IsValid())
		{
			//GoodJsonString += CodeJsonValue->AsNumber();
			int32 CodeNum1 = CodeJsonValue->AsNumber();
		}
		TSharedPtr<FJsonValue> MessageJsonValue = BackGoodJSON->TryGetField(TEXT("Message"));
		if (CodeJsonValue.IsValid())
		{
			FString MessageString = MessageJsonValue->AsString();
		}
		TSharedPtr<FJsonValue>  InsideJsonValue = BackGoodJSON->TryGetField(TEXT("WX"));
		if (InsideJsonValue.IsValid())
		{
			TSharedPtr<FJsonObject> JsonObject = InsideJsonValue->AsObject();
			if (JsonObject.IsValid())
			{
				TSharedPtr<FJsonValue> tmpValue = JsonObject->TryGetField(TEXT("ServerVersion"));
				if (tmpValue.IsValid())
				{
					FString Value = tmpValue->AsString();
					UE_LOG(LogJson, Error, TEXT("%s"), *Value);
				}
			}
		}
	}

}

二.FJsonObject的解析

在JsonObject时有三种方式,解析的函数。

cpp 复制代码
void ASimpleActor::ReadJSON2()
{
	FString GoodJsonString = TEXT("");
	FString FilePath = FPaths::ProjectSavedDir() / TEXT("GoodJSON.json");
	//反序列化
	FFileHelper::LoadFileToString(GoodJsonString, *FilePath);
	TSharedPtr<FJsonObject> BackGoodJSONObject;
	TSharedRef<TJsonReader<TCHAR>> BackGoodJSONReader =
		TJsonReaderFactory<TCHAR>::Create(GoodJsonString);

	bool IsDesirialize = FJsonSerializer::Deserialize(BackGoodJSONReader, BackGoodJSONObject);  
	//反序列化,将GoodJsonString 流 反序列化 到 用JsoonReader 反序列化到 JsonObject 上
	if (IsDesirialize)
	{
		TSharedPtr<FJsonValue> CodeJsonValue = BackGoodJSONObject->TryGetField(TEXT("Code"));  //返回Ptr,what Fuck
		if (CodeJsonValue.IsValid())
		{
			int32 CodeNum1 = CodeJsonValue->AsNumber();
		}
		int32 CodeNum2 = -1;
		//第二种方式
		bool bFindCode = BackGoodJSONObject->TryGetNumberField(TEXT("Code"),CodeNum2);
		//第三种方式
		int32 CodeNum3 = BackGoodJSONObject->GetNumberField(TEXT("Code"));
	}
}
相关推荐
YuMiao2 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
SimonKing2 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean2 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven973 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55112 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河13 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程15 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅17 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者18 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq