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"));
	}
}
相关推荐
一灯架构12 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
Y40900113 小时前
【多线程】线程安全(1)
java·开发语言·jvm
菜菜艾13 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
重生的黑客13 小时前
Linux开发工具:条件编译、动静态库与 make/makefile 入门
linux·运维·服务器
布局呆星13 小时前
SpringBoot 基础入门
java·spring boot·spring
minji...14 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
风吹迎面入袖凉14 小时前
【Redis】Redisson的可重入锁原理
java·redis
w61001046614 小时前
cka-2026-ConfigMap
java·linux·cka·configmap
航Hang*14 小时前
VMware vSphere 云平台运维与管理基础——第2章(扩展):VMware ESXi 5.5 安装、配置与运维
运维·服务器·github·系统安全·虚拟化