UE4 C++将Json数据写入目标字符串

代码示例:

cpp 复制代码
FString PropertyResString;

TSharedRef<TJsonWriter<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>> Writer =
    TJsonWriterFactory<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>::Create(&PropertyResString);

Writer->WriteObjectStart();    // 写 {
Writer->WriteValue("Name", "ChatGPT");  // 写 "Name":"ChatGPT"
Writer->WriteValue("Age", 3);             // 写 "Age":3
Writer->WriteObjectEnd();                  // 写 }

Writer->Close();

UE_LOG(LogTemp, Log, TEXT("JSON Result: %s"), *PropertyResString);

最后,PropertyResString 会是:

cpp 复制代码
{"Name":"ChatGPT","Age":3}

再提一句这里有个写入策略供JSON 写入器(TJsonWriter)选择

写入策略类型 描述
TCondensedJsonPrintPolicy<TCHAR> 紧凑格式,减少空格、换行,单行输出
TPrettyJsonPrintPolicy<TCHAR> 美化格式,带缩进和换行,便于阅读

如果我们选择TPrettyJsonPrintPolicy写入策略的话,PropertyResString 会是:

cpp 复制代码
{
    "Name": "ChatGPT",
    "Age": 3
}

主要流程如下:

  1. 准备JSON写入目标字符串

    这里假定已经定义了 FString PropertyResString;,用于存储最终写入的JSON数据。

  2. 调用工厂函数创建写入器
    TJsonWriterFactory::Create 创建一个写入器,绑定在 PropertyResString,之后所有写入行为都写进这个字符串。

  3. 调用写入函数 WriteObjectStart()

    • WriteObjectStart() 是写入器类里的方法,用于写入 { ,表示JSON对象开始。
    • 紧跟着可以调用WriteValue()WriteObjectEnd()等方法,写完整个对象。
  4. 写完以后需要调用 Writer->Close() 来结束写入(用户代码中通常要写这步)

    • 这段代码片段没给出,但在UE文档里建议写完数据后调用。
    • Close()会把缓存的内容最终写入字符串。
代码部分 功能解释
TSharedRef<TJsonWriter<...>> Writer 声明了一个非空JSON写入器智能引用
TJsonWriterFactory<...>::Create(&PropertyResString) 工厂方法,创建写入器并绑定字符串输出
WriteObjectStart() 写入 {,开始一个新的JSON对象
TCondensedJsonPrintPolicy 紧凑格式输出,避免无用空白字符和换行
PropertyResString 用于存放生成的JSON字符串
相关推荐
房开民20 小时前
c++总结
java·开发语言·c++
好大哥呀20 小时前
C++ 多态
java·jvm·c++
墨韵流芳1 天前
CCF-CSP第41次认证第三题——进程通信
c++·人工智能·算法·机器学习·csp·ccf
hz_zhangrl1 天前
CCF-GESP 等级考试 2026年3月认证C++五级真题解析
c++·青少年编程·程序设计·gesp·c++五级·gesp2026年3月·gesp c++五级
Σίσυφος19001 天前
C++ 多肽经典面试题
开发语言·c++·面试
crescent_悦1 天前
C++:The Largest Generation
java·开发语言·c++
paeamecium1 天前
【PAT甲级真题】- Student List for Course (25)
数据结构·c++·算法·list·pat考试
云姜.1 天前
JSON Schema使用
python·json
c++逐梦人1 天前
C++11——— 包装器
开发语言·c++
十年编程老舅1 天前
Linux 多线程高并发编程:读写锁的核心原理与底层实现
linux·c++·linux内核·高并发·线程池·多线程·多进程