UE - Json

文章介绍了如何在C++的UE4游戏模式中使用FJsonSerializer进行Json的读取(从文件和对象中)和写入(构造FJsonObject并生成Json字符串),包括处理整数、字符串、嵌套对象和数组的示例。
摘要由CSDN通过智能技术生成

引入模块

txt

Code

void AUECPPGameModeBase::ReadObjectJson()
{
	FString JsonStr;

	//从文件中读取Json
	if (FFileHelper::LoadFileToString(JsonStr, TEXT("C:\\Users\\pc\\Desktop\\Week\\json.txt"))) {
		UE_LOG(LogTemp, Error, TEXT("Read File Successed"));
	}

	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(JsonStr); //Reader
	TSharedPtr<FJsonObject> JsonObject;											  //根对象 , 就是解析出来Json 需要载体去承接
	FJsonSerializer::Deserialize(JsonReader, JsonObject);						  //反序列化


	//解析 int32 code 
	int32 code = JsonObject->GetIntegerField(TEXT("code"));
	UE_LOG(LogTemp, Warning, TEXT("%d"), code);
	
	//解析 FString
	FString message = JsonObject->GetStringField(TEXT("message"));
	UE_LOG(LogTemp, Warning, TEXT("%s"), *message);

	//解析 Object header
	TSharedPtr<FJsonObject> HeaderPtr = JsonObject->GetObjectField(TEXT("header"));
	FString A = HeaderPtr->GetStringField("A");
	FString B = HeaderPtr->GetStringField("B");
	UE_LOG(LogTemp, Warning, TEXT("%s"), *A);
	UE_LOG(LogTemp, Warning, TEXT("%s"), *B);

	//解析 Object Array player
	TArray<TSharedPtr<FJsonValue>> PlayerArray = JsonObject->GetArrayField(TEXT("player"));
	
	for (int i = 0; i < PlayerArray.Num() - 1; ++i) {
		UE_LOG(LogTemp, Error, TEXT("=============================="));
		
		UE_LOG(LogTemp, Warning, TEXT("%s"), *PlayerArray[i]->AsObject()->GetStringField("name"));

		UE_LOG(LogTemp, Warning, TEXT("%d"), PlayerArray[i]->AsObject()->GetIntegerField("levels"));
	}

}	

struct  FPlayer {

	FString Name;
	int32 Levels;

};


struct FHeader {

	FString A;
	FString B;
};


void AUECPPGameModeBase::WriteObjectJson()
{
	const TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);

	// Set interger code
	JsonObject->SetNumberField(TEXT("code"), 404);

	//Set String message
	JsonObject->SetStringField(TEXT("message"), TEXT("Not Find")); 
	
	//Set Object Header
	const TSharedPtr<FJsonObject> HeaderObject = MakeShareable(new FJsonObject);
	HeaderObject->SetStringField(TEXT("A"), TEXT("a"));
	HeaderObject->SetStringField(TEXT("B"), TEXT("b"));
	JsonObject->SetObjectField(TEXT("header"), HeaderObject);

	//Set Object Array Player
	TArray<FPlayer> PlayerArray;
	FPlayer Jinx , Zoe;
	Jinx.Name = TEXT("Jinx");  Jinx.Levels = 17;
	Zoe.Name = TEXT("Zoe"); Zoe.Levels = 18;
	PlayerArray.Add(Jinx);
	PlayerArray.Add(Zoe);


	TArray<TSharedPtr<FJsonValue>> PlayerJsonValueArray;
	for (int i = 0; i < PlayerArray.Num(); ++i) {

		TSharedPtr<FJsonObject> PlayerJsonObject = MakeShareable(new FJsonObject);
		PlayerJsonObject->SetStringField("name", PlayerArray[i].Name);
		PlayerJsonObject->SetNumberField("levels", PlayerArray[i].Levels);
		
		PlayerJsonValueArray.Add(MakeShareable(new FJsonValueObject(PlayerJsonObject)));
	}
	JsonObject->SetArrayField(TEXT("player"), PlayerJsonValueArray);


	//Write
	FString JsonStr;
	TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&JsonStr);
	if (FJsonSerializer::Serialize(JsonObject.ToSharedRef(),JsonWriter)) {
		UE_LOG(LogTemp, Error, TEXT("%s"), *JsonStr);
	}

}


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值