UE开发随笔------json与struct互相转换(FJsonObjectConverter)

UStruct定义:

USTRUCT()
struct FHeartBeatMsg
{
	GENERATED_BODY()
public:
	UPROPERTY()
	FString pcCode = TEXT("");
	UPROPERTY()
	FString deviceType = TEXT("");
	UPROPERTY()
	FString messageType = TEXT("");
	UPROPERTY()
	FString content = TEXT("");
};

使用相应转换函数需要添加相关插件模块,Json、JsonUtilities

		PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				"CoreUObject",
				"Engine",
				"Json",
                "JsonUtilities"
			}
			);
相关头文件引入:
#include "JsonObjectConverter.h"
一、json转换为struct

1、json字符串转换为struct

    //FString JsonStr
	FHeartBeatMsg sRecMsg;
	FJsonObjectConverter::JsonObjectStringToUStruct<FHeartBeatMsg>(JsonStr, &sRecMsg, 0, 0);

2、json object转换为struct

	FHeartBeatMsg sRecMsg;
	FJsonObjectConverter::JsonObjectToUStruct<FHeartBeatMsg>(RootObj.ToSharedRef(), &sRecMsg, 0, 0);

附加:json字符串转json object

	//FString JsonStr
    TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonStr);
	TSharedPtr<FJsonObject> RootObj = MakeShareable(new FJsonObject);
	if (!FJsonSerializer::Deserialize(JsonReader, RootObj))
	{
		return;
	}
二、struct转换为json字符串
	FHeartBeatMsg sHeartBeatMsg;
	sHeartBeatMsg.pcCode = TEXT("123");
	sHeartBeatMsg.content = TEXT("test");;

	FString ContentJsonString;
	bool bRet = FJsonObjectConverter::UStructToJsonObjectString(FHeartBeatMsg::StaticStruct(), &sHeartBeatMsg, ContentJsonString, 0, 0);

	if (!bRet)
	{
		//UE_LOG
		return;
	}

注意字符串大小写

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!将一个结构体转换JSON 格式的字符串,需要使用 JSON 库。以下是一个示例程序,使用了开源的 cJSON 库实现了结构体转 JSON 的功能: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" typedef struct { int id; char name[32]; double score; } Student; int main() { // 创建一个结构体对象 Student s = { 123, "Tom", 90.5 }; // 将结构体转换JSON 格式的字符串 cJSON* root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "id", s.id); cJSON_AddStringToObject(root, "name", s.name); cJSON_AddNumberToObject(root, "score", s.score); char* json_str = cJSON_Print(root); printf("%s\n", json_str); // 释放内存 cJSON_Delete(root); free(json_str); return 0; } ``` 在上面的示例程序中,我们定义了一个名为 `Student` 的结构体,并创建了一个结构体对象 `s`。然后使用 cJSON 库中的 `cJSON_CreateObject()` 函数创建了一个 JSON 对象 `root`,并使用 `cJSON_AddNumberToObject()`、`cJSON_AddStringToObject()`、`cJSON_AddNumberToObject()` 等函数将结构体中的成员添加到 JSON 对象中。最后使用 `cJSON_Print()` 函数将 JSON 对象转换为字符串。 以上程序的输出结果为: ```json {"id":123,"name":"Tom","score":90.5} ``` 需要注意的是,在使用 cJSON 库时,需要在编译时链接该库。在 Linux 系统中,可以使用以下命令编译上面的程序: ``` gcc struct2json.c cJSON.c -o struct2json ``` 其中,`cJSON.c` 是 cJSON 库的源代码文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值