`
阅读更多

 

对以下 JSON 文件进行读写操作(序列化与反序列化)。

 

{
	"nested":
	{
		"id": "i am nested id",
		"name": "this is the nested name"
	},
	"foo": "i am test foo",
	"bar_arr": [
		{
			"barfoo": "i am barfoo test"
		}
	]
}

 

定义好反序列化的文件对象结构:

 

USTRUCT()
struct FNested
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    FString id;

    UPROPERTY()
    FString name;
};

USTRUCT()
struct FBar
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    FString barfoo;
};

USTRUCT()
struct FJsonData
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    FNested nested;

    UPROPERTY()
    FString foo;

    UPROPERTY()
    TArray<FBar> bar_arr;

    //Transient 会阻止该属性被序列化
    UPROPERTY(Transient)
    FString PropertyToIgnore;
};

 

读写操作:

void UJsonSerializeComponent::Read() 
{
	FString FilePath = "F:\\svn-master\\thirdparty-master\\JsonSerializeSample\\Content\\test.json";
	FString FileData = "";
	if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*FilePath))
	{
		UE_LOG(LogTemp, Warning, TEXT("DID NOT FIND FILE"));
		return;
	}

	FJsonData JsonData;
	FFileHelper::LoadFileToString(FileData, *FilePath);

	UE_LOG(LogTemp, Warning, TEXT("%s"), *FileData);

	if (FJsonObjectConverter::JsonObjectStringToUStruct(FileData, &JsonData, 0, 0))
	{
		UE_LOG(LogTemp, Warning, TEXT("CONVERTED"));
		UE_LOG(LogTemp, Warning, TEXT("NestedName: %s "), *JsonData.nested.name);
	}
}

void UJsonSerializeComponent::Write() 
{
	FJsonData JsonData;
	JsonData.nested.id = "i am nested id2";
	JsonData.nested.name = "this is the nested name2";
	JsonData.foo = "i am test foo2";
	FBar bar;
	bar.barfoo = "i am barfoo test2";
	JsonData.bar_arr.Add(bar);

	FString JsonString;
	FJsonObjectConverter::UStructToJsonObjectString(JsonData, JsonString);

	//save to file
	FFileHelper::SaveStringToFile(JsonString, *FString("F:\\svn-master\\thirdparty-master\\JsonSerializeSample\\Content\\test.json"));
}

 

记得要在 PublicDependencyModuleNames 中加入 "Json" 和  "JsonUtilities" 模块。

 

1
0
分享到:
评论

相关推荐

    JSON Serialization and Deserialization (native MQL) - MetaTrader 5程序库.zip

    标题"JSON Serialization and Deserialization (native MQL) - MetaTrader 5程序库.zip"暗示了这个压缩包包含了一个原生的MQL5实现,用于处理JSON序列化和反序列化的功能。这意味着用户可以利用这些功能将MQL5的数据...

    LVDS Source Synchronous DDR Deserialization, Xilinx 7 Series FPG

    笔记中提供的宏支持的解串比率包括1:4、1:6和1:8,还有经过微调的版本用于支持1:10的解串比率。这意味着一个LVDS数据线可以被转换成4、6、8或10条并行数据线,根据具体的应用需求来选择合适的比例。 为了实现高效...

    C++Serialization-开源

    标题中的"C++ Serialization"指的是C++编程语言中的序列化技术,这是将对象的状态转换为可以存储或传输的数据格式的过程。序列化在很多场景下都非常重要,例如保存游戏进度、网络通信、持久化数据等。开源则意味着这...

    OXMLv25_dcu_d5-rio.7z

    direct JSON reader and writer with JSON serialization and deserialization RTTI serialization/deserialization of JSON objects OXml supports all Delphi versions starting from Delphi 5 on all platforms...

    Boost::Serialization存储C++对象

    Boost::Serialization是C++库中的一个模块,它提供了一种序列化和反序列化对象的能力。这个库使得能够将复杂的C++对象结构保存到文件、数据库或者网络流中,然后在需要时重新加载,这对于数据持久化、版本控制以及跨...

    A C++11 library for serialization

    cereal is a header-only C++11 serialization library. cereal takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. cereal ...

    c-sharp-form-xml-serialization-deserialization:您可以在此处以c清晰的形式看到序列化和反序列化过程

    本项目“c-sharp-form-xml-serialization-deserialization”提供了一个直观的例子,展示了如何在C#环境中进行XML序列化和反序列化的具体操作。 XML序列化是将对象的状态转换为XML格式的过程。这使得对象的数据可以...

    xapp265.zip_FPGA LVDS VHDL_LVDS xilinx FPGA_high_lvds xilinx_x

    High-Speed Data Serialization and Deserialization(840 Mb/s LVDS) for xilinx fpga

    CLI-Serialization-Deserialization:申请任务

    CLI序列化反序列化 在您的PC上安装程序的迷你指南: 1.在控制台中的my-cli-tool文件夹的根目录上运行'npm i' 2.运行'npm install -g。' 在控制台中,在my-cli-tool文件夹的根目录下3.命令“ appolica”已准备就绪,...

    jsoncpp-1.8.0

    JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings. It can also preserve existing comment in unserialization/serialization ...

    C++11 下使用 Boost.Serialization 库实现智能指针的序列化

    Boost.Serialization库是C++社区广泛使用的序列化工具,它提供了丰富的功能来处理各种类型的对象,包括智能指针。在C++11及更高版本中,智能指针(如`std::unique_ptr`,`std::shared_ptr`和`std::scoped_ptr`)被...

    序列化和反序列化 Serialization

    数据的序列化和反序列化 Serialization DeSerialization

    A C++11 library for serialization.zip

    标题 "A C++11 library for serialization.zip" 暗示了一个C++11标准的序列化库。序列化在编程中是一个关键概念,它允许将对象的状态转换为可存储或传输的数据格式,如文本或二进制。C++11是C++编程语言的一个重要...

    c20-programmers-3rd.epub

    Written for programmers with a background in another high-level language, C++20 for Programmers applies the Deitel signature live-code approach to teaching Modern C++ and explores the C++20 language ...

    Resource serialization and concurrency control.pdf

    IBM DB2 z/OS平台下的资源序列化与并发控制是一个涉及数据完整性与事务管理复杂性的高级主题。DB2 for z/OS是IBM为大型主机(zSeries或z/OS操作系统)设计的关系型数据库管理系统。在这份文件中,我们会详细探讨DB2...

    C++RPC基于boost.asio、boost.serialization等boost库进行反射.zip

    4. **C++ RpcLight**:根据压缩包中的文件名称,CppRpcLight可能是这个项目的源代码库。这个轻量级的RPC实现可能专注于简单易用、性能优化和低依赖性,以便于集成到现有的C++项目中。 实现RPC的关键步骤包括: - *...

    Sams Teach Yourself Visual C++ In 21 Days

    Learn Visual C++ through the Teach ... lists and serialization; toolbars and status bars; graphics; and projects. Week Three examines the more involved aspects of Visual C++ and Windows applications.

    TI TLK1221 datasheet

    The TLK1221 performs the data serialization, deserialization, and clock extraction functions for a physical layer interface device. The transceiver operates at 1.25 Gbps (typical), providing up to 1 ...

Global site tag (gtag.js) - Google Analytics