虚幻引擎4中的C嵌套JSON

虚幻引擎4中的C嵌套JSON,第1张

概述我有一个 JSON对象,我从我的服务器,看起来像这样: { "state":"1", "player1": { "alias":"Player Name", "ready":"0" }} 我能够获取JSON,将其解析为FJsonObject,并使用此代码序列化检索JSON对象的第一级中的任何数字或字符串: TSharedPtr<FJsonO 我有一个 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类,我用它来从Blueprints调用这些函数.

这一切都很好,但是当我尝试从二级读取东西时,事情就不起作用了.

我编写了这段代码来提升下一级别:

TSharedPtr<FJsonObject> nested = storedJsON->GetobjectFIEld(key);

但是所有获取嵌套字段的调用都没有返回.

nested->GetStringFIEld(anotherKey); //nothing

所以,例如,使用上面的JsON,这个:

TSharedPtr<FJsonObject> nested = storedJsON->GetobjectFIEld("player1");FString alias = nested->GetStringFIEld("alias");

当我将其打印到控制台时,别名没有任何价值.

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

解决方法 不知道你是否解决了它,但我发现了一个非常讨厌的函数,适用于嵌套对象,也适用于数组.并且它为您提供了一个USTRUCT,因此您不必使用通过Keys获取值的函数(我不喜欢它们,因为它们非常容易出错).相反,你会有类型安全!

FJsonObjectConverter :: JsonObjectStringToUStruct

这是docs和UE4 AnswerHub回答的另一个问题

基本上,您创建目标USTRUCT(或嵌套JsON的USTRUCT),使用UPROPERTY标记所有属性,因此Unreal知道它们的名称,并使用此函数.它将通过匹配它们来复制值.它甚至复制阵列! = d

我将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);

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

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

我没有使用int和float在JsON中测试它,但由于它复制了偶数数组,我相信它也可以工作.

总结

以上是内存溢出为你收集整理的虚幻引擎4中的C嵌套JSON全部内容,希望文章能够帮你解决虚幻引擎4中的C嵌套JSON所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1255643.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存