UE4 通过Json文件实现对数据的增删查改

主要内容:

本文主要讲解在UE4中如何用Json文件实现增删查改操作 。

实现步骤:

一.新建插件以及创建C++Class
UE4 通过Json文件实现对数据的增删查改_第1张图片

UE4 通过Json文件实现对数据的增删查改_第2张图片
UE4 通过Json文件实现对数据的增删查改_第3张图片
添加json模块
UE4 通过Json文件实现对数据的增删查改_第4张图片
具体代码实现:
JsonToolSubsystem.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "JsonToolSubsystem.generated.h"

/**
 * 
 */

//表示建筑朝向的枚举
UENUM(BlueprintType)
enum class EOrient : uint8
{
	North,
	East,
	South,
	West,
};

//创建表示物体信息的结构体
USTRUCT(BlueprintType)
struct FBuildingInfo
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BuildingInfo")
		int32 Building_ID;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BuildingInfo")
		FString Building_Name;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BuildingInfo")
		FVector Building_Location;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BuildingInfo")
		EOrient Orientation;
};

//创建表示所有建筑信息的结构体
USTRUCT(BlueprintType)
struct FAllBuildingInfo
{
	GENERATED_USTRUCT_BODY()

		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BuildingInfo")
		TArray<FBuildingInfo> BuildingInfo;
};

UCLASS()
class JSONTOOLS_API UJsonToolSubsystem : public UGameInstanceSubsystem
{
	GENERATED_BODY()

public:
public:
	//init
	UFUNCTION(BlueprintCallable, Category = "ReadJsonFile")
		bool Init(const FString& Filename);
	//Read Json
	UFUNCTION(BlueprintCallable, Category = "ReadJsonFile")
		bool ReadJson(const FString& Filename, int32 ID, FBuildingInfo& Data);
	//Save Json
	UFUNCTION(BlueprintCallable, Category = "ReadJsonFile")
		bool SaveJson(const FString& Filename, const FBuildingInfo& Data);
	//Remove Json 
	UFUNCTION(BlueprintCallable, Category = "ReadJsonFile")
		bool RemoveJson(const FString& Filename, int32 ID);

private:
	FAllBuildingInfo AllInfo;
};

JsonToolSubsystem.cpp

在这里插入代码片
```// Fill out your copyright notice in the Description page of Project Settings.


#include "JsonToolSubsystem.h"
#include "Runtime/JsonUtilities/Public/JsonObjectConverter.h"
#include 

bool UJsonToolSubsystem::Init(const FString& Filename)
{
	FString JsonStr = "";
	if (FFileHelper::LoadFileToString(JsonStr, *Filename))
	{
		/* 加载文件并将拿到的Json字符串转为对应结构体 */
		FJsonObjectConverter::JsonObjectStringToUStruct<FAllBuildingInfo>(JsonStr, &AllInfo, 0, 0);
		return true;
	}
	return false;
}

bool UJsonToolSubsystem::ReadJson(const FString& Filename, int32 ID, FBuildingInfo& Data)
{
	if (Init(Filename) == true)
	{
		int32 i = 0;
		//判断建筑的ID和json文件内所存储的ID是否有一致的值,如果有就把对应的结构体取出来
		for (i = 0; i < AllInfo.BuildingInfo.Num(); ++i)
		{
			if (ID == AllInfo.BuildingInfo[i].Building_ID)
			{
				Data = AllInfo.BuildingInfo[i];
				return true;
			}
		}
		return false;
	}
	return false;
}

bool UJsonToolSubsystem::SaveJson(const FString& Filename, const FBuildingInfo& Data)
{
	if (Init(Filename) == true)
	{
		FString JsonStr = "";
		int32 i = 0;
		for (i = 0; i < AllInfo.BuildingInfo.Num(); ++i)
		{
			//判断json文件里是否有相同ID属性的结构体,如果有则替换,没有则新增结构体元素
			if (Data.Building_ID == AllInfo.BuildingInfo[i].Building_ID)
			{
				AllInfo.BuildingInfo[i] = Data;
				FJsonObjectConverter::UStructToJsonObjectString(AllInfo, JsonStr, 0, 0);
				return FFileHelper::SaveStringToFile(JsonStr, *Filename);
			}
		}
		AllInfo.BuildingInfo.Add(Data);
		FJsonObjectConverter::UStructToJsonObjectString(AllInfo, JsonStr, 0, 0);
		return FFileHelper::SaveStringToFile(JsonStr, *Filename);
	}
	return false;
}

bool UJsonToolSubsystem::RemoveJson(const FString& Filename, int32 ID)
{
	if (Init(Filename) == true)
	{
		FString JsonStr = "";
		int32 i = 0;
		for (i = 0; i < AllInfo.BuildingInfo.Num(); ++i)
		{
			if (ID == AllInfo.BuildingInfo[i].Building_ID)
			{
				AllInfo.BuildingInfo.RemoveAt(i);
				FJsonObjectConverter::UStructToJsonObjectString(AllInfo, JsonStr, 0, 0);
				return FFileHelper::SaveStringToFile(JsonStr, *Filename);
			}
		}
		return false;
	}
	return false;
}

二、具体功能展现

ps:进行操作时切勿打开Json文件

新建json文件
UE4 通过Json文件实现对数据的增删查改_第5张图片
UE4 通过Json文件实现对数据的增删查改_第6张图片
1.读取
UE4 通过Json文件实现对数据的增删查改_第7张图片

2.修改
UE4 通过Json文件实现对数据的增删查改_第8张图片
3.增加
UE4 通过Json文件实现对数据的增删查改_第9张图片
4.删除
UE4 通过Json文件实现对数据的增删查改_第10张图片
三、工程文件(4.25)

链接:https://pan.baidu.com/s/1ulM8ojmKpwqTVFYBJGdA0g
提取码:6au6

你可能感兴趣的:(UE4,C++,ue4,json)