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字符串
相关推荐
郝学胜_神的一滴11 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天1 天前
C++ 基础入门完全指南
c++
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK3 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
Venuslite3 天前
从 Unexpected token < 到 Extra data:一次讲清 JSON 解析错误的排查思路
json
卷无止境3 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境3 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴4 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境6 天前
C++ 的Eigen 库全解析
c++
卷无止境6 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端