UE4C++Json与Struct转换

UE4C++Json与Struct转换

UE4中Json可以通过序列化和反序列函数实现Json结构和字符串之间的转换。可以将Json中的浮点,整型变量通过JsonReader获取,如果想要将自定义的结构体转换为JSON,复杂一点,可以通过将结构体内的参数通过序列化操作一点点加入JSON结构,也可以通过UE4 jsonobjectconvert中的原生函数实现。

定义结构体

在UE4C++中自定义结构体,主要通过在你需要加入结构体中的.h文件添加代码实现。主要结构如下:
USTRUCT(BlueprintType)
struct FMyStruct
{
GENERATED_BODY()

//~ 蓝图图表可以访问以下成员变量:
// 这是我们测试变量的提示文本。
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Test Variables")
int32 MyIntegerMemberVariable;

//~ 蓝图图表无法访问以下成员变量:
int32 NativeOnlyMemberVariable;

/**~
* 蓝图图表无法访问此UObject指针,但是
* 指针对UE4的反射、智能指针和垃圾回收系统
* 可见。
*/
UPROPERTY()
UObject* SafeObjectPointer;

};
具体可以参考官方文档:
UE4C++添加结构体

准备操作

在执行准换前,需要给项目的build.cs文件添加"Json", "JsonUtilities"模块,同时在需要转换的文件中添加头文件:
#include “Runtime/JsonUtilities/Public/JsonObjectConverter.h”

转换将结构体转换为Json

例如我们自定义一个结构体

USTRUCT(BlueprintType)
struct FPlayer
{
  GENERATED_BODY()

  UPROPERTY()
  FString Name;

  UPROPERTY()
  int32 Level;

  UPROPERTY()
  TArray<FString> Friends;

  UPROPERTY(Transient)
  FString PropertyToIgnore;
};

测试代码:

FPlayer Player;
Player.Name = "Frank";
Player.Level = 3;
Player.Friends.Add("Jeff");
Player.PropertyToIgnore = "Gotta Go Fast";

FString JSONPayload;
FJsonObjectConverter::UStructToJsonObjectString(Player, JSONPayload, 0, 0);

UStructToJsonObjectString第一个参数是自定义的结构体变量,第二个参数是一个字符串,该函数可以实现将结构体转换成JSON字符串。后面的两个参数可以不填,有默认参数重载。
最后的结果为:

{
  "name": "Frank",
  "level": 3,
  "friends": ["Jeff"]
}

Json转结构体

Json转结构体主要也是将JSON字符串转换成结构体:

FString JSONPayload = "...";  
FPlayer Player;

FJsonObjectConverter::JsonObjectStringToUStruct(JSONPayload, &Player, 0, 0);

JsonObjectStringToUStruct第一个参数是JSON字符串,第二个参数为接收数据的结构体变量引用。后面两个参数也可以去掉,有默认参数重载。

同时,如果是在网络通信中想要传输结构体,经过测试,只需要结构体内部的变量类型,名字一致,结构体名字不一定相同,都能实现结构体的数据传输。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值