UE C++ json 使用

9 篇文章 3 订阅
8 篇文章 0 订阅

Json String to Json Object


	FString jsonstr="{'id':'xx','arr':[{'no':0}]}";
	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(jsonstr);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
		TArray<TSharedPtr<FJsonValue>> arr = rRoot->GetArrayField("arr");
		for (auto i:arr)
		{
			TSharedPtr<FJsonObject> iObj = i->AsObject();
			int32 no = iObj->GetNumberField("no");
		}
	}

JsonArr add Item


	TSharedPtr<FJsonObject> jsonObject = MakeShareable(new FJsonObject);
	
	TArray<TSharedPtr<FJsonValue>> jsondataArr;
		TSharedPtr<FJsonObject> jsonData = MakeShareable(new FJsonObject);
		jsonData->SetStringField(TEXT("name"), TEXT("xxx"));
	jsondataArr.Add(MakeShareable(new FJsonValueObject(jsonData)));
	
	jsonObject->SetArrayField(TEXT("arr"), jsondataArr);

UStruct to Json String


	USTRUCT()
	struct FEntityInfoItemStruct
	{
		GENERATED_USTRUCT_BODY()
		FEntityInfoItemStruct() {};
		FEntityInfoItemStruct(FString _id, FString _type, float _lat, float _lng) :EntityInfoItemId(_id), EntityInfoItemType(_type), EntityInfoItemLat(_lat), EntityInfoItemLng(_lng) {};
		UPROPERTY()
			FString EntityInfoItemId;
		UPROPERTY()
			FString EntityInfoItemType;
		UPROPERTY()
			float EntityInfoItemLat;
		UPROPERTY()
			float EntityInfoItemLng;
	};

	USTRUCT()
	struct FEntityInfoStruct
	{
		GENERATED_USTRUCT_BODY()
		UPROPERTY()
		FString action;
		UPROPERTY()
		TArray<FEntityInfoItemStruct> data;

		FString ToString()
		{
			FString OutStr;
			FJsonObjectConverter::UStructToJsonObjectString(*this, OutStr, 0, 0);
			return OutStr;
		}
	};
	
	FString converstr_ustruct2jsonstr;
	FEntityInfoStruct tempEntityInfo;
	tempEntityInfo.action = "type";
	for (uint8 i=0;i<10;i++)
	{
		FEntityInfoItemStruct tempEntityInfoItem("id_"+i, "type_"+1, 0.0, 0.0);
		tempEntityInfo.data.Emplace(tempEntityInfoItem);
	}

	FJsonObjectConverter::UStructToJsonObjectString(tempEntityInfo, converstr_ustruct2jsonstr, 0, 0);
	//converstr_ustruct2jsonstr = tempEntityInfo.ToString();

Json String to UStruct


	USTRUCT()
	struct FUserStruct
	{
		GENERATED_USTRUCT_BODY()
			UPROPERTY()
			FString id;
			UPROPERTY()
			FString name;
			UPROPERTY()
			int32 age;
	};

	FUserStruct userStruct;
	FString converstr_json2ustruct;
	FString resstr = "{'id':'001','name':'Jack','age':10 }";
	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(resstr);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
		FJsonObjectConverter::JsonObjectToUStruct(rRoot.ToSharedRef(), &userStruct);
	}

Json Obj to UStruct


	USTRUCT(BlueprintType)
struct FFlightData {
	GENERATED_USTRUCT_BODY()
	UPROPERTY(BlueprintReadWrite)
		FString  	height;
	UPROPERTY(BlueprintReadWrite)
		FString  	latitude;
	UPROPERTY(BlueprintReadWrite)
		FString  	longitude;

};
USTRUCT(BlueprintType)
struct FFlightDatas {
	GENERATED_USTRUCT_BODY()
		UPROPERTY(BlueprintReadWrite)
	TArray<FFlightData> FlightDatas;
}; 

	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(jsondata);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
		FFlightDatas FlightDatas;
		FJsonObjectConverter::JsonObjectToUStruct(rRoot.ToSharedRef(), FFlightDatas::StaticStruct(), &FlightDatas, 0, 0);
	}

示例

USTRUCT(BlueprintType)
struct FTrackDatasss
{
	GENERATED_BODY()
	UPROPERTY(BlueprintReadOnly)
	FVector v=FVector::ZeroVector;
	UPROPERTY(BlueprintReadOnly)
	FRotator r=FRotator::ZeroRotator;
};


	FTrackDatasss ss;
	FString s;
	FJsonObjectConverter::UStructToJsonObjectString(ss, s, 0, 0);
	UJGF_FunLib::FunLib_Print("1: "+s);
  

{
	"v":
	{
		"x": 0,
		"y": 0,
		"z": 0
	},
	"r":
	{
		"pitch": 0,
		"yaw": 0,
		"roll": 0
	}
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中保存JSON数据可以通过使用Json标准库来实现。下面是一个简单的示例: 首先,需要包含Json标准库的头文件。 ```cpp #include "Json.h" ``` 然后,创建一个Json对象,并添加需要保存的数据。 ```cpp FJsonObject jsonObject; // 添加数据 jsonObject.SetStringField("name", "John"); jsonObject.SetNumberField("age", 25); // 如果需要保存更复杂的数据,可以使用Json数组 // TArray<FJsonValue> jsonArray; // jsonArray.Add(MakeShareable(new FJsonValueString("value1"))); // jsonArray.Add(MakeShareable(new FJsonValueNumber(42))); // jsonObject.SetArrayField("array", jsonArray); ``` 接下来,将Json对象转换为字符串。 ```cpp // 将Json对象转换为Json字符串 TSharedPtr<FJsonObject> jsonPtr = MakeShareable(new FJsonObject(jsonObject)); FString jsonString; TSharedRef<TJsonWriter<>> jsonWriter = TJsonWriterFactory<>::Create(&jsonString); FJsonSerializer::Serialize(jsonPtr.ToSharedRef(), jsonWriter); ``` 最后,将Json字符串保存到文件中。 ```cpp FFileHelper::SaveStringToFile(jsonString, TEXT("保存路径")); ``` 如果想要从文件中读取Json数据,可以使用类似的步骤。 首先,加载Json文件内容到一个字符串中。 ```cpp FString jsonString; FFileHelper::LoadFileToString(jsonString, TEXT("文件路径")); ``` 然后,将Json字符串解析为Json对象。 ```cpp TSharedPtr<FJsonObject> jsonObject; TSharedRef<TJsonReader<>> jsonReader = TJsonReaderFactory<>::Create(jsonString); if (FJsonSerializer::Deserialize(jsonReader, jsonObject)) { // 解析成功,可以通过JsonObject访问保存的数据 FString name = jsonObject->GetStringField("name"); int32 age = jsonObject->GetNumberField("age"); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值