虚幻引擎 4 中的 C++ 嵌套 JSON

2024-01-17

我有一个从服务器获取的 JSON 对象,如下所示:

{
    "state":"1",
    "player1": {
        "alias":"Player Name",
        "ready":"0"
    }
}

我能够获取 JSON,将其解析为 FJsonObject,并使用以下代码检索 JSON 对象第一级中的任何数字或字符串进行序列化:

TSharedPtr<FJsonObject> JsonParsed;
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(json);
if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
    //Use JsonParsed

这段代码读取字符串:

FString AJSONContainer::getStringWithKey(FString key)
{
    return storedJSON->GetStringField(key);
}    

边注:

AJSONContainer 只是一个 Actor 类,我用它从蓝图中调用这些函数。


这一切都很好,但当我尝试从第二层阅读内容时,事情不起作用。

我编写这段代码是为了降低下一个级别:

TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField(key);

但所有获取字段的调用nested什么也不返回。

nested->GetStringField(anotherKey); //Nothing

因此,例如,对于上面的 JSON,如下所示:

TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField("player1");
FString alias = nested->GetStringField("alias");

alias当我将其打印到控制台时没有任何价值。


难道我做错了什么?为什么二级 JSON 不起作用?


不知道你是否已经解决了,但我发现了一个非常讨厌的函数,它适用于嵌套对象,也适用于数组。它给你一个 USTRUCT,所以你不必使用通过 Keys 获取值的函数(我不喜欢它们,因为它们很容易出错)。相反,您将拥有类型安全!

FJsonObjectConverter::JsonObjectStringToUStruct

这里有docs https://docs.unrealengine.com/latest/INT/API/Runtime/JsonUtilities/FJsonObjectConverter/JsonObjectStringToUStruct/index.html另一个问题的回答UE4 应答中心 https://answers.unrealengine.com/questions/21011/how-do-i-properly-utilize-jsonobjectstringtoustruc.html

基本上,您创建目标 USTRUCT(或嵌套 JSON 的 USTRUCT),用 UPROPERTY 标记所有属性,以便 Unreal 知道它们的名称,并使用此函数。它将通过匹配值来复制这些值。它甚至复制数组! =D

Example

我将调用 JSON FString 进行反序列化Json它的结构如下所示。它包含一个嵌套对象和一个数组,使事情变得有趣。

{
    "nested" : {
        "id" : "654asdf",
        "name" : "The Name"
    },
    "foo" : "foobar",
    "bar_arr" : [
        { "barfoo" : "asdf" },
        { "barfoo" : "qwer" }
    ]
}

在转换之前,我们需要从内到外创建 USTRUCT(这样我们就可以在外部引用内部)。请记住始终使用F对于结构名称。

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;
};

转换将如下所示:

FJsonData JsonData;
FJsonObjectConverter::JsonObjectStringToUStruct<FJsonData>(
    Json,
    &JsonData,
    0, 0);

现在,您可以像标准 C++ 结构中一样访问所有属性。例如,要访问其中之一barfoos:

FString barfoo0 = JsonData.bar_arr[0].barfoo;

我还没有在 JSON 中使用 int 和 float 测试它,但由于它甚至复制数组,我相信这也可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚幻引擎 4 中的 C++ 嵌套 JSON 的相关文章

  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 解析线性方程的系数

    在java中 我试图找到线性方程的系数 以在我的计算器应用程序中找到线性方程的解 例如 3x 2 6x 3 2 4x 我渴望得到的是 x 的系数和形式的常数ax b 0 在这个特定的例子中 coefficient 19 constant 8
  • 将内存中的 HTML 保存到 S3 AWS Python Boto3

    import boto3 from io import StringIO s3 boto3 client s3 display Altair Charting buff StringIO display save str obj html
  • 如何启动 Matlab 分析器

    我切换到 Matlab 2012b 从 2011a 但未能找到如何在新的 matlab gui 中启动分析器 gui GUI 选项仍然存在 在编辑器选项卡中 一旦函数崩溃 您将能够指定输入参数
  • 我们可以向 super() 传递什么参数?

    我创建了一个Vehicle类并且还想有一个Car从它派生的类调用父构造函数来设置name and color 但是我收到这个错误 super takes at least 1 argument 0 given 这是我的代码 class Ve
  • Promise 构造函数的返回值

    考虑下面两个例子 TEST 1 function test1 return new Promise function return 123 test1 then function data console log DATA data ret
  • 如何取消合并单元格 EPPlus?

    我正在尝试根据表列的数量取消合并并重新合并更短或更长的范围 我使用了下面的代码 但它似乎不起作用 tableSheet Cells C1 J1 Merge false 任何帮助将不胜感激 您运行的是 EPP 4 0 1 吗 如果是这样 则这
  • 一个属性可以访问另一个属性吗?

    我刚刚接触Python 这是一个关于类的逻辑和实现的非常普遍的问题 我对这个问题的基本水平表示歉意 但希望它对其他人也有用 这里有一些上下文可以使它更清楚 Context 我想创建一个代表图像的类 该图像包括 3 个波段 R G B 与 3
  • 从udf访问hdfs文件

    我想通过 udf 调用访问文件 这是我的脚本 files LOAD docs in USING PigStorage AS id stopwords id2 file buzz FOREACH files GENERATE pigbuzz
  • 依赖下拉框 CakePHP 3

    我创建了一个国家 城市和客户表 我试图确保当我从下拉列表中添加新客户时 我可以选择一个国家 然后选择与该国家 地区相关的城市 目前我无法从下拉列表中选择任何城市和国家 地区组合 这是我的数据库 CREATE TABLE IF NOT EXI
  • MySql 全天候查询结果

    我需要获取一天中所有时间的数据 即使计数为 0 现在它输出 clicks hour 1 7 2 13 我现在的查询 SELECT count as clicks hour time as hour FROM clicks WHERE DAT
  • DOM 中相邻的文本节点可以用 Javascript 合并吗?

    假设我在网页 DOM 中有一个句子 当我检查它时 它由 3 个文本节点组成 后跟一些元素 例如粗体或斜体 我想将文本节点合并为一个文本节点 因为相邻的文本节点是没有意义的 没有理由拥有它们 有没有办法轻松合并它们 谢谢 看起来Node no
  • JPA OneToOne 关联,其中 2 个实体使用复合主键但使用不同的列名称?

    我们正在尝试将 Hibernate 与数据库一起使用 该数据库使用lot复合键的使用一直让我们很头疼 不幸的是 我们无法更改架构 因此我们必须在字段之间进行大量额外的映射 我们仅限于使用 JPA 1 0 和 Hibernate 3 3 最大
  • WooCommerce 中特定单个产品页面的附加自定义按钮

    在 WooCommerce 中 需要创建另一个按钮 该按钮重定向到特定产品页面当前 添加到购物车 按钮下方的 联系我们 表单 例如 http offers elements com sg product ha power dose faci
  • 具有“加权”边缘的 Ford-Fulkerson 算法

    福特 福尔克森是否有任何变体可以在边缘增加额外的 重量 尺寸 我的意思是 某些边缘比其他边缘更理想 尽管存在所有可能性 但它会优先考虑理想边缘而不是不太理想的边缘 据我所知 增加权重有两种常见的概括 最小成本流 假设您对每条边都有一个权重
  • 将 $or 与 $elemMatch 和数组外部的条件一起使用

    我的基本结构是我有一个 User 对象和一个包含 subjectId 和每小时价格的会话对象 User defaultHourly Number subjects id String hourly Number 我这样使用 elemMatc
  • 如何在 JavaScript 中计算负整数的模?

    我试图通过递增或递减 1 来迭代 jQuery 对象数组 因此 对于递减部分 我使用以下代码 var splitted id currentDiv attr id split var indexOfDivToGo parseInt spli
  • Vagrant 与 apache 同步文件夹权限问题

    我正在运行 Centos6 4 机器 Running vagrant upVagrant 文件中没有同步文件夹配置就可以了 我可以通过以下方式访问我的主机http localhost 8080它显示 Apache 页面 我可以在中创建ind
  • 比较rapidjson::文档

    我有两个 RapidJSON 文档 一个是我在运行时创建的 另一个是从磁盘读取的 我想比较这两个文件是否相似 比较 RapidJSON 文档的最佳方法是什么 我的 JSON 看起来像这样 SimpleCompany Manager read
  • 如何使用 PHP 读取串口 [重复]

    这个问题在这里已经有答案了 如何使用 php 从连接到我的服务器 运行 kali linux 的旧笔记本电脑 上的 COM 端口的 arduino 读取串行数据 以便我可以在网页上显示数据 我读过有关同一问题的其他问题 所有这些问题要么超级
  • 虚幻引擎 4 中的 C++ 嵌套 JSON

    我有一个从服务器获取的 JSON 对象 如下所示 state 1 player1 alias Player Name ready 0 我能够获取 JSON 将其解析为 FJsonObject 并使用以下代码检索 JSON 对象第一级中的任何