UE5读取本地json文件
时间: 2025-05-07 10:37:43 浏览: 73
### 实现UE5中读取本地JSON文件
为了在Unreal Engine 5 (UE5) 中实现读取本地 JSON 文件的功能,可以采用C++ 或者蓝图的方式。以下是基于 C++ 的方法来解析并处理 JSON 数据。
#### 创建自定义类用于加载和解析 JSON 文件
1. **创建一个新的 C++ 类继承于 `AActor`**
此操作可以通过编辑器完成,在项目设置里启用插件支持后重启编辑器再创建新类[^1]。
2. **编写头文件 (.h)**
```cpp
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "JsonUtilities/Public/JsonObjectConverter.h"
#include "MyJsonReader.generated.h"
UCLASS()
class MYPROJECT_API AMyJsonReader : public AActor
{
GENERATED_BODY()
public:
// 构造函数
AMyJsonReader();
protected:
virtual void BeginPlay() override;
private:
void LoadAndParseJsonFile();
};
```
3. **编写源文件 (.cpp)**
```cpp
#include "MyJsonReader.h"
#include "Misc/FileHelper.h"
#include "Dom/JsonObject.h"
#include "Serialization/JsonSerializer.h"
#include "Serialization/JsonReader.h"
#include "HAL/FileManagerGeneric.h"
AMyJsonReader::AMyJsonReader()
{
PrimaryActorTick.bCanEverTick = false;
}
void AMyJsonReader::BeginPlay()
{
Super::BeginPlay();
LoadAndParseJsonFile();
}
void AMyJsonReader::LoadAndParseJsonFile()
{
FString FilePath = FPaths::ProjectContentDir() / TEXT("Data/Test.json");
TArray<FByte> RawFileData;
if (!FFileHelper::LoadFileToArray(RawFileData, *FilePath))
{
UE_LOG(LogTemp, Warning, TEXT("Failed to load file"));
return;
}
FString JsonString(UTF8_TO_TCHAR((const char*)RawFileData.GetData()));
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonString);
TSharedPtr<FJsonObject> JsonObject;
if(FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
{
const FString* ValuePtr;
if (JsonObject->TryGetStringField(TEXT("key"), ValuePtr))
{
UE_LOG(LogTemp, Log, TEXT("Value of key is %s"), *ValuePtr);
}
else
{
UE_LOG(LogTemp, Error, TEXT("Key not found or invalid type."));
}
}
else
{
UE_LOG(LogTemp, Error, TEXT("Invalid json format."));
}
}
```
上述代码展示了如何通过指定路径加载 JSON 文件,并将其转换成字符串形式以便进一步解析。接着使用 Unreal 提供的工具类将 JSON 字符串反序列化为对象,最后尝试获取特定键对应的值[^4]。
#### 配置工程以支持 JSON 解析
确保项目的 `.Build.cs` 文件包含了必要的模块依赖:
```csharp
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","Json","JsonUtilities"});
```
这一步骤非常重要,因为它引入了处理 JSON 所需的核心库和支持功能[^2]。
#### 测试与验证
编译完成后可以在场景中放置此类实例并通过控制台日志查看输出结果,确认是否成功读取到了预期的数据条目。
阅读全文
相关推荐


















