引入模块
![](https://img-blog.csdnimg.cn/direct/bbe91c8932b64d5e8f0a5e60a22ec6ee.png)
读
txt
![](https://img-blog.csdnimg.cn/direct/dd13f5968904444699ff81306b6ee278.png)
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);
}
}
![](https://img-blog.csdnimg.cn/direct/ef3872397a5445f1951affbd25a49c18.png)