UE4 Json读写+Json与FString互转

32 篇文章 43 订阅

原创文章,转载请注明出处。

一.读Json格式数据

先看json文件是什么样子的

{
	"data": [
		"\\UserResourceLibary\\ImportMovie\\456.mp4",
		"\\UserResourceLibary\\ImportMovie\\葛洲坝.mp4"
	]
}

读的代码,我将里面的data读成一个数组
GetArrayField类似的方法有很多,比如GetObjectField/GetBoolField/GetStringField等

TArray<TSharedPtr<FJsonValue>> arrValue;
TSharedPtr<FJsonObject> rootObject = MakeShareable(new FJsonObject());
FString sJsonPath = TEXT("D:\\GSPWorkSpacePath\\GSPP_TEMP_WORKSPACEPATH\\ABD869614245EAE984EA53A9E6E0092C\\gameres.json");

if (FPaths::FileExists(sJsonPath))
{
	FString fileStr = TEXT("");
	FFileHelper::LoadFileToString(fileStr, *sJsonPath);//1>将文件转成UE4的FString
	TSharedRef<TJsonReader<>> jsonReader = TJsonReaderFactory<>::Create(fileStr);
	if (FJsonSerializer::Deserialize(jsonReader, rootObject))//将FString格式化成Json格式
	{
		//GetArrayField类似的方法有很多,比如GetObjectField/GetBoolField/GetStringField等
		auto existArrayData = rootObject->GetArrayField("data");
		arrValue.Append(existArrayData);
	}
}

二.写Json格式数据到本地文件中

先看写完后的json文件是什么样子的

{
	"data": [
		"\\UserResourceLibary\\ImportMovie\\456.mp4",
		"\\UserResourceLibary\\ImportMovie\\葛洲坝.mp4"
	]
}

写的代码,我将里面的data读成一个数组
1>新建一个FJsonObject
2>调用你想入的Json的格式 方法有SetArrayField/SetObjectField/SetBoolField/SetStringField等

bool UUtilsLibrary::WriteUserLibaryImportJson(int32 Type, TArray<TSharedPtr<FJsonValue>>& Data)
{
	TSharedPtr<FJsonObject> rootObject = MakeShareable(new FJsonObject());
	rootObject->SetArrayField("data", Data);
	FString JsonStr = TEXT("");
	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonStr);
	FJsonSerializer::Serialize(rootObject.ToSharedRef(), Writer);
	FString JsonPath = TEXT("D:\\GSPWorkSpacePath\\GSPP_TEMP_WORKSPACEPATH\\ABD869614245EAE984EA53A9E6E0092C\\gameres.json");
	bool WriteJson = FFileHelper::SaveStringToFile(JsonStr, *JsonPath);
	if (!WriteJson)
	{
		FMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT("写入Json失败!")));
	}
	return WriteJson;
}

三>JsonObject转成FSrtring

TSharedPtr<FJsonObject> JsonObject;
bool bIsOk = FJsonSerializer::Deserialize(JsonReader, JsonObject);

FString JsonStr = TEXT("");
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonStr);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);

四>FString转成JsonObject

TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(Response->GetContentAsString());
TSharedPtr<FJsonObject> JsonObject;
bool bIsOk = FJsonSerializer::Deserialize(JsonReader, JsonObject);

谢谢,创作不易,大侠请留步… 动起可爱的双手,来个关注再走呗
ღ( ´・ᴗ・` )比心<( ̄︶ ̄)>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WhiteTian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值